您的位置:首页 > 其它

《cv中文参考手册-图像轮廓处理-结构分析与形状识别--外接正矩形轮廓区域》

2017-08-15 11:16 423 查看
在目标识别中我们首先要把感兴趣的目标提取出来,而一般常见的步骤都是通过颜色或纹理提取出目标的前景图(一幅黑白图像,目标以白色显示在图像中),接下来我们要对前景图进行分析进一步地把目标提取出来,而这里常常用到的就是提取目标的轮廓。OpenCV 里提取目标轮廓的函数是findContours,它的输入图像是一幅二值图像,输出的是每一个连通区域的轮廓点的集合:vector<vector<Point>>。外层vector的size代表了图像中轮廓的个数,里面vector的
size代表了轮廓上点的个数。下面我们通过实例来看函数的用法。提取到轮廓后,其实我们更关心的是如果把这些轮廓转换为可以利用的特征,也就是涉及到轮廓的描述问题,这时就有多种方法可以选择,比如矢量化为多边形、矩形、椭圆等。OpenCV里提供了一些这样的函数。

1、获取包围对象的垂直矩阵cv::Rect r0= cv::boundingRect(cv::Mat(contours[0]));

cv::rectangle(result,r0,cv::Scalar(0),2);

Calculates the up-right bounding rectangle of a point set.
C++: Rect boundingRect(InputArray points)
Python: cv2.boundingRect(points) →
retval

C: CvRect cvBoundingRect(CvArr* points,
int update=0 )
Parameters:
The function calculates and returns the minimal up-right bounding rectangle for the specified point set.

输入参数points是所要求最小外结矩的点集数组或向量.

cv::Rect r0= cv::boundingRect(cv::Mat(contours[0]));

cv::rectangle(result,r0,cv::Scalar(0),2); 


// 轮廓表示为一个矩形 

Rect r = boundingRect(Mat(contours[0])); //矩形

rectangle(result, r, Scalar(255), 2);

Mat srcImage(Size(500,500), CV_8UC3, Scalar(0));

vector <Point> points ;

Rect rect=boudingRect(points); //随机生成点集

rectangle(srcImage,rect,Scalar(0,255,0),2); 选择区域Rect
1)构造函数 Rect(x,y,width,height),x, y 为左上角坐标, width, height 则为长和宽。

2)方法 contain(Point) 可返回改点是否在矩形内。

3)方法 inside(Rect) 可返回该矩形是否在矩形内。

4)交集 Rect=Rect1&Rect2

5)  并集 Rect=Rect1|Rect2

6) 平移 RectShift=Rect+Point

7) 缩放 RectScale=Rect+Size

8) 利用对角线两点来画矩形:

void rectangle(Mat& img,
Point pt1,Point pt2,const Scalar& color,
int thickness=1, int lineType=8,
int shift=0)

9) 传入矩形参数来画矩形:

void rectangle(Mat& img,
Rect rec, const Scalar& color,
int thickness=1, int lineType=8,
int shift=0 )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐