cvBlob / Opencv:为什么输出变量为空?

时间:2011-12-01 09:39:26

标签: c++ image-processing opencv computer-vision

做的时候:

IplImage blobimg = image;

IplImage *labelImg=cvCreateImage(cvGetSize(&blobimg), IPL_DEPTH_LABEL, 1);
IplImage *test=cvCreateImage(cvGetSize(&blobimg), IPL_DEPTH_8U, 3);
unsigned int result=cvLabel(&blobimg, labelImg, blobs);

cvRenderBlobs(labelImg, blobs, &blobimg,test,CV_BLOB_RENDER_BOUNDING_BOX);
Mat imgMat(test);

imshow("Depth", imgMat);

我注意到我的测试变量是空的: enter image description here

我想我必须这样做:

cvRenderBlobs(labelImg, blobs, &blobimg,&blobimg,CV_BLOB_RENDER_BOUNDING_BOX);

但是cvRenderBlobs destImg必须有3个通道和IPL_DEPTH_8U,而我的图像只有1个通道,因为它是灰色图像。

有人可以告诉我为什么会这样,以及如何解决这个问题?

修改

图片来自:

Mat *depthImage = new Mat(480, 640, CV_8UC1, Scalar::all(0));
Mat image = *depthImage;

2 个答案:

答案 0 :(得分:0)

在这里猜测但不是太多次我看到IplImages的实例实际上并不是指针。你确定 image ,无论它来自哪里,都不是指向IplImage结构的指针吗?

    IplImage *blobimg = image;

答案 1 :(得分:0)

我在我的项目中使用了这部分代码并且它可以工作,看看它是否有帮助:

//BYTE* blobMap = ... blobMap holds an image
CvMat mat = cvMat( HEIGHT, WIDTH, CV_8UC1, blobMap);
IplImage *img = cvCreateImage(cvSize(HEIGHT,WIDTH), IPL_DEPTH_8U, 1);
cvGetImage(&mat, img);
cvThreshold(img, img, 10, 255, CV_THRESH_BINARY);
IplImage *labelImg = cvCreateImage(cvGetSize(img),IPL_DEPTH_LABEL,1);
CvBlobs blobs;
unsigned int result = cvLabel(img, labelImg, blobs);
cvFilterByArea(blobs, 1000, 1680*HEIGHT);

IplImage *imgOut = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
cvRenderBlobs(labelImg, blobs, img, imgOut);
cvNamedWindow("test", 1);
cvShowImage("test", imgOut);
cvWaitKey(0);
cvDestroyWindow("test");

我也不喜欢你将Mat传递给IplImage的方式,你确定你的输入图像(blobimg)没问题吗?