OpenCV实现最小外接正矩形

本文实例为大家分享了OpenCV实现最小外接正矩形的具体代码,供大家参考,具体内容如下

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "math.h"
#include <iostream.h>
int main(int argc, char* argv[])

{  

 IplImage *src;
 IplImage *dst;
 IplImage *ROI;
 CvMemStorage* storage=cvCreateMemStorage(0);
 CvSeq* contour=0;
 src=cvLoadImage("I:\\test.jpg",0);
 cvNamedWindow("image0",1);
 cvShowImage("image0",src);

 int  hei=src->height;
 int wid=src->width;
 uchar *data;
 data=(uchar*)src->imageData;
 int widstep=src->widthStep;
 int channel=src->nChannels;
 dst=cvCreateImage(cvSize(wid,hei),IPL_DEPTH_8U,3);
 ROI=cvCreateImage(cvSize(wid,hei),IPL_DEPTH_8U,3);

 for (int i=0;i<hei;i++)

 {

   for(int j=0;j<wid;j++)

   {

    if (data[i*widstep+j*channel]>120)

    {

      data[i*widstep+j*channel]=0;

    }

    else

    {

      data[i*widstep+j*channel]=255;

    }

   }

 }

 cvNamedWindow("image",0);
 cvShowImage("image",src);
 printf("图像的高为:%d,宽为:%d\n\n",hei,wid);
 cvCvtColor(src, dst, CV_GRAY2BGR);;
cvFindContours(src,storage,&contour,sizeof(CvContour),CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE);
 for(;contour!=0;contour=contour->h_next) 

 {

   double length =cvArcLength(contour);
   double area =fabs(cvContourArea(contour));
   CvRect rect = cvBoundingRect(contour,1);
   cout<<"Length="<<length<<"  Area="<<area<<endl;
   CvPoint p1;
   CvPoint p2;
   p1.x=rect.x;
   p1.y=rect.y;
   p2.x=rect.x+rect.width;
   p2.y=rect.y+rect.height;
   cout<<"p1=("<<p1.x<<","<<p1.y<<")";
   cout<<"p2=("<<p2.x<<","<<p2.y<<")"<<endl;
   cvRectangle(dst,p1,p2,CV_RGB(255,0,0),1,8,0); 

 }

   cvNamedWindow("dst",1);
   cvShowImage("dst",dst);
   cvWaitKey(0);

 return 0; 

}

原图:

二值化反色图:

最小正矩形图:

最小正矩形信息:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Opencv绘制最小外接矩形、最小外接圆

    Opencv中求点集的最小外结矩使用方法minAreaRect,求点集的最小外接圆使用方法minEnclosingCircle. minAreaRect方法原型: RotatedRect minAreaRect( InputArray points ); 输入参数points是所要求最小外结矩的点集数组或向量: minEnclosingCircle方法原型: void minEnclosingCircle( InputArray points, CV_OUT Point2f& center, C

  • OpenCV实现图像轮廓检测以及外接矩形

    前两篇博文分别介绍了图像的边缘检测和轮廓检测,本文接着介绍图像的轮廓检测和轮廓外接矩形: 一.代码部分: // extract_contours.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<cv.h> #include<highgui.h> using namespace cv; using namespace std; int _tmain(int argc, _TCHAR* argv[]) { /

  • Opencv实现最小外接矩形和圆

    本文实例为大家分享了Opencv实现最小外接矩形和圆的具体代码,供大家参考,具体内容如下 步骤:将一幅图像先转灰度,再canny边缘检测得到二值化边缘图像,再寻找轮廓,轮廓是由一系列点构成的,要想获得轮廓的最小外接矩形,首先需要得到轮廓的近似多边形,用道格拉斯-普克抽稀(DP)算法,道格拉斯-普克抽稀算法,是将曲线近似表示为一系列点,并减少点的数量的一种算法. 该算法实现抽稀的过程是: 1)对曲线的首末点虚连一条直线,求曲线上所有点与直线的距离,并找出最大距离值dmax,用dmax与事先给定的阈

  • OpenCV外接USB摄像头的方法

    近期,需要利用OpenCV计算机视觉库读取视频并显示.保存.由于之前一直使用笔记本,此次台式机外接USB摄像头,出现了很大问题,总是显示内存问题,谷歌.百度大半天,总结各路大神建议,最终解决了问题,将问题和代码分享给大家,避免走弯路. 出现问题原因: 1. 摄像头初始化需要时间,进入循环前 waitKey(2000),否则会出现闪退:         2. 摄像头视频存在解码问题. //--------------------------------------[程序说明]-----------

  • OpenCV实现最小外接正矩形

    本文实例为大家分享了OpenCV实现最小外接正矩形的具体代码,供大家参考,具体内容如下 #include "stdafx.h" #include "cv.h" #include "highgui.h" #include "cxcore.h" #include "math.h" #include <iostream.h> int main(int argc, char* argv[]) { Ipl

  • python opencv minAreaRect 生成最小外接矩形的方法

    使用python opencv返回点集cnt的最小外接矩形,所用函数为 cv2.minAreaRect(cnt) ,cnt是点集数组或向量(里面存放的是点的坐标),并且这个点集不定个数. 举例说明:画一个任意四边形(任意多边形都可以)的最小外接矩形,那么点集 cnt 存放的就是该四边形的4个顶点坐标(点集里面有4个点) cnt = np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]]) # 必须是array数组的形式 rect = cv2.minAreaRect(

  • python3+openCV 获取图片中文本区域的最小外接矩形实例

    我就废话不多说了,大家还是直接看代码吧! print("thresh =",thresh) coords = np.column_stack(np.where(thresh > 0))//获取thresh二值灰度图片中的白色文字区域的点 print("coords =",coords) min_rect = cv2.minAreaRect(coords)//由点集获取最小矩形(包含中心坐标点.宽和高.偏转角度) print("min_rec =&qu

  • Python实现图片查找轮廓、多边形拟合、最小外接矩形代码

    1.概述 经常用到轮廓查找和多边形拟合等opencv操作,因此记录以备后续使用.本文代码中的阈值条件对图片没有实际意义,仅仅是为了测试. 原图为: 2.测试代码: import cv2 import numpy as np img = cv2.imread('/home/yasin/coffe.jpg') img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) _, contours, hierarchy = cv2.findContours(img_g

  • python四个坐标点对图片区域最小外接矩形进行裁剪

    在图像裁剪操作中,opencv和pillow两个库都具有相应的函数,但是这两个库中的函数仅仅能对与图片平行的矩形进行裁剪操作,如果想要对目标的最小外接矩形进行裁剪该如何操作呢?如下所示: 具体处理该问题的思路如下: 计算最小外接矩形的四个点的坐标,旋转角度 将原图像进行旋转,旋转角度为最小外接矩形的角度 将四个点的坐标进行映射,求出被旋转后图像的四个点的坐标 利用这四个点对图像进行裁剪 图像原图如下: 1 求出该区域的最小外接矩形,并且得到外接矩形的四个点的坐标和旋转角度. rect = cv2

  • python opencv实现目标外接图形

    本文实例为大家分享了python opencv实现图像目标的外接图形,供大家参考,具体内容如下 当使用cv2.findContours函数找到图像中的目标后,我们通常希望使用一个集合区域将图像包围起来,这里介绍opencv几种几何包围图形. 边界矩形 最小外接矩形 最小外接圆 简介 无论使用哪种几何外接方法,都需要先进行轮廓检测. 当我们得到轮廓对象后,可以使用boundingRect()得到包裹此轮廓的最小正矩形,minAreaRect()得到包裹轮廓的最小矩形(允许矩阵倾斜),minEncl

  • opencv求解区域的内接矩形

    实验室项目中,希望求取一个近似圆形区域的质心,原本使用最小外接圆的质心来等效为该区域质心.但是由于部分区域的形状过于不规则导致发生质心偏移现象.如下图: 蓝色为实际要求质心.红色为等效圆质心 为获取较为准确的质心,拟用最大内接矩形的中心作为该区域质心. 采用改进的中心扩散法求内接矩形:先以最小外接矩的中心作为算法的起点进行中心扩散.得到一个内解矩形,在对最小外接矩的中心进行8邻域的遍历,应用中心扩散法分别求取内接矩,以面积最大的内接矩作为最大内接矩. 使用Opencv关键代码如下: /** *

  • OpenCV实现轮廓外接多边形

    本文实例为大家分享了OpenCV实现轮廓外接多边形的具体代码,供大家参考,具体内容如下 取轮廓最大外接矩形 Rect boundingRect( InputArray array ); array:输入的灰度图像或者2D点集,数据类型为vector或者Mat. 该函数可以求取包含输入图像中物体轮廓或者2D点集的最大外接矩形,函数只有一个参数,可以是灰度图像或者2D点集,灰度图像的参数类型为Mat,2D点集的参数类型为vector或者Mat.该函数的返回值是一个Rect类型的变量,该变量可以直接用

随机推荐