cvBlob / Opencv: почему моя выходная переменная пуста? - PullRequest
1 голос
/ 01 декабря 2011

При выполнении:

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 голосов
/ 02 декабря 2011

Я использую эту часть кода в своем проекте, и она работает, посмотрите, может ли она помочь:

//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");

Мне также не нравится, как вы передаете мат IplImage, вы уверены, что ваше входное изображение (blobimg) в порядке?

0 голосов
/ 02 декабря 2011

Угадайте здесь, но не слишком много раз я видел случаи IplImages, которые на самом деле не являются указателями.Вы уверены, что image , откуда бы оно ни исходило, также не указатель на структуру IplImage?

    IplImage *blobimg = image;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...