【问题标题】:cvBlob/Opencv: Why is my output variable empty?cvBlob/Opencv:为什么我的输出变量是空的?
【发布时间】:2011-12-02 07:09:17
【问题描述】:

做的时候:

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,而我的图像只有 1 个通道,因为它是灰色图像。

谁能告诉我这是为什么以及如何解决这个问题?

编辑

图片来源:

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

【问题讨论】:

  • 我使用的不是 cvBlobsLib,而是 cvBlobs。它们不一样:)。
  • 对不起 - 是的,我意识到我的错误并删除了评论

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


【解决方案1】:

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

    IplImage *blobimg = image;

【讨论】:

  • 我已经在问题中添加了它的来源
【解决方案2】:

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

//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) 没问题吗?

【讨论】:

  • 看起来像这样,当我将 Mat 传递给 IplImage 时,我看到 blobimg 具有宽度、高度、nChannels 等
猜你喜欢
  • 2021-03-24
  • 2016-01-12
  • 2012-12-23
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 2016-04-24
相关资源
最近更新 更多