我已经根据教程here编写了这个教程,但我无法获得图像的凸包(我使用的教程中显示了类似的手形图像)。我得到的源和边输出很好,但应该画轮廓和凸包线的“绘图”输出不显示任何绘制的东西,而是完全黑色的。任何想法为什么这可能是?在opencv中查找对象的凸包?
#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <opencv/cxcore.h>
int main(int argc,char **argv)
{
cvNamedWindow("Source", 1);
cvNamedWindow("edges window", 1);
cvNamedWindow("Drawings", 1);
IplImage* src = cvLoadImage("img.jpg", 0);
IplImage* edges = cvCreateImage(cvGetSize(src), 8, 1);
// Finding edges
cvThreshold(src, edges, 150, 255, CV_THRESH_BINARY);
CvMemStorage* storage = cvCreateMemStorage();
CvSeq* first_contour = NULL;
int Nc = cvFindContours(
edges,
storage,
&first_contour,
sizeof(CvContour),
CV_RETR_LIST);
// Finding convex Hull
CvMemStorage* hull_storage = cvCreateMemStorage();
CvSeq* retHulls = NULL;
for(CvSeq* i = first_contour; i != 0; i = i->h_next){
// note h_next is next sequence.
retHulls = cvConvexHull2(first_contour,hull_storage,CV_CLOCKWISE,1);
}
// drawing contours and hull
IplImage* draw = cvCreateImage(cvGetSize(edges), 8, 3);
for(CvSeq* i = first_contour; i != 0; i = i->h_next){
cvDrawContours(draw,first_contour,cvScalar(255,0,0,0),cvScalar(255,0,0,0),0,1,8);
cvDrawContours(draw,retHulls,cvScalar(255,0,0,0),cvScalar(255,0,0,0),0,1,8);
}
cvShowImage("Source", src);
cvShowImage("edges window", edges);
cvShowImage("Drawings", draw);
cvWaitKey();
cvDestroyAllWindows();
cvReleaseImage(&src);
cvReleaseImage(&edges);
cvReleaseImage(&draw);
return 0;
}
您好,嗯改变它在我的代码没有影响?你把我的代码或你自己试试呢? - 谢谢 – silent 2012-08-06 07:48:10
@silent看更新。 – ArtemStorozhuk 2012-08-06 18:05:18
为图像提供工作,但它不适用于这样的事情的欢呼声? http://i.imgur.com/1nYN7.jpg有关为什么? – silent 2012-08-08 13:42:41