在做时:
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);我注意到我的测试变量是空的:

我想我必须这样做:
cvRenderBlobs(labelImg, blobs, &blobimg,&blobimg,CV_BLOB_RENDER_BOUNDING_BOX);但是cvRenderBlobs destImg必须有3个通道,而IPL_DEPTH_8U和我的图像只有一个通道,因为它是一幅灰色图像。
谁能告诉我这是为什么,我怎样才能解决这个问题?
编辑
图像的来源:
Mat *depthImage = new Mat(480, 640, CV_8UC1, Scalar::all(0));
Mat image = *depthImage;发布于 2011-12-01 20:35:48
我会在这里猜测,但并不是太多次,我已经看到IplImages的实例,这些实例实际上不是指针。您确定图像,无论来自何处,也是指向IplImage结构的指针吗?
IplImage *blobimg = image;发布于 2011-12-01 23:09:17
我在我的项目中使用了这部分代码,它可以工作,看看它是否有帮助:
//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)是安全的吗?
https://stackoverflow.com/questions/8339168
复制相似问题