关于opencvdrawcontours的信息

本篇文章给大家谈谈opencvdrawcontours,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

opencv中cvDrawContours不能画自己创建的CvSeq

可能是你腔铅的sizeof(CvSeq) 的问哪圆闭李裂题,给你一个demo,亲测有效

void DrawBox(CvBox2D box,IplImage* img,CvScalar scalar)

{

CvPoint2D32f point[4];

int i;

for ( i=0; i4; i++)

{

point[i].x = 0;

point[i].y = 0;

}

cvBoxPoints(box, point); //计算二维盒子顶点

CvPoint pt[4];

for ( i=0; i4; i++)

{

pt[i].x = (int)point[i].x;

pt[i].y = (int)point[i].y;

}

CvMemStorage* store = cvCreateMemStorage(0);

CvSeq* seq = cvCreateSeq(CV_SEQ_ELTYPE_POINT | CV_SEQ_KIND_CURVE | CV_SEQ_FLAG_CLOSED,sizeof(CvContour),sizeof(CvPoint),store);

for (size_t i = 0; i 4; i++)

{

cvSeqPush(seq,pt[i]);

}

for (size_t i = 0; i seq-total; i++)

{

CvPoint* p=(CvPoint*)cvGetSeqElem(seq,i);

printf("p-x=%d,p-y=%d\n",p-x,p-y);

}

cvDrawContours(img,seq,CV_RGB(255,255,255),CV_RGB(255,255,255),1,3,8);

cvReleaseMemStorage(store);

}

opencv cvDrawContours填充轮廓外的颜色

很简单啊,换个思路,可以这么弄:你先用cvFindContours()获得轮廓,然枯老亮后用cvZero()将这张图片全都涂黑,然后用cvDrawContours()将轮廓内含旦填充成白色即可没宽。

[img]

从图像边缘到物体轮廓

上一篇已经讲解了很多算子用来检测边缘,其中用得最多的是canny边缘检测。只有边缘还不够,有很多时候我们还需要获得图片上的某物体轮廓。

轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。

Opencv提供了一个函数findContours()用于发现轮廓,它有三个参数,第一个是输入图像,第二个是轮廓巧扮检索模式,第三个是轮廓近似方法。

findContours()的返回值有三个,第一个是图像,第二个是轮廓,第三个是(轮廓的)层析结构。最常用的是第二个返回值。

轮廓(第二个返回值)是一个Python列表,其中储存这亩则图像中所有轮廓。每一个轮廓都是一个Numpy数组,包含对象边界点(x,y)的坐标。

Opencv提供了一个函数drawContours()用于绘制轮廓。

轮廓特征计算的结果并不等同于像素点的个数,而是根据几何方法算出来的,所以有小数。

参数2表示轮廓是否封闭

形状的外接矩形有两种,如下图,绿色的叫外接矩形,表示不考虑旋转并且能包含整个轮廓的矩形。蓝色的叫最小外接矩,考虑了旋转。

其中np.int0(x)是把x取整的操作,比如377.93就会变成377,也可以用x.astype(np.int)

外接圆跟外接矩形一样,找到一个能包围物体的最小圆:

我们可以用得到的轮廓拟合出一个椭圆:

第一个参数是某一轮廓。第二个参数是像素点坐标。第三迅宽棚个参数如果为True则输出该像素点到轮廓最近距离;如果为False,则输出为正表示在轮廓内,0为轮廓上,负为轮廓外。

关于opencvdrawcontours和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表