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