我刚刚发现CvBlobsLib可以成为一个祝福,但它遗憾地使用了IplImage 有没有机会有一个新的cv :: Mat风格的版本,我碰巧找不到它?
编辑:
事实证明,我碰巧发现了2个不同的库,CvBlobsLib和CvBlobs,yeehaa。 :)
我看到CvBlobsLib比cvBlobs使用得少,这不是在opencv willowgarage上,而是在谷歌代码上。我欢迎这两个库的答案,因为它们都适用于IplImage。 :)
答案 0 :(得分:5)
编辑:我在这个答案中谈论cvBlobs,抱歉我把它搞砸了cvBlobsLib ......
我一直在寻找这个,但没有想出任何使用新图像结构的库。
但实际上,您可以随时执行此操作:IplImage iplImg = mat;
,只需在需要&iplimg
的任何地方使用IplImage*
。
我在一些项目中使用cvBlobs这种方式成功:
#include <cvblob.h>
using namespace cvb;
// load image
cv::Mat mat = cv::imread("image.jpg");
// convert cv::Mat to IplImage
IplImage img = mat;
// convert to grayscale
IplImage *gray = cvCreateImage( cvGetSize(&img), IPL_DEPTH_8U, 1 );
cvCvtColor( &img, gray, CV_BGR2GRAY );
// get binary image
cvThreshold( gray, gray, 150, 255, CV_THRESH_BINARY );
// get blobs
IplImage *labelImg = cvCreateImage( cvGetSize(gray), IPL_DEPTH_LABEL, 1 );
CvBlobs blobs;
unsigned int result = cvLabel( gray, labelImg, blobs );
// render blobs in original image
cvRenderBlobs( labelImg, blobs, &img, &img );
// *always* remember freeing unused IplImages
cvReleaseImage( labelImg );
cvReleaseImage( gray );
// convert back to cv::Mat
cv::Mat output( &img );
答案 1 :(得分:3)
实际上,@ moosgummi的真实C ++版本的答案看起来像这样:
#include <cvblobs.h>
using namespace cvb;
using namespace cv;
// load image
Mat mat = imread("image.jpg");
// convert to grayscale
Mat gray; cvtColor(mat, gray, CV_BGR2GRAY);
// get binary image
threshold( gray, gray, 150, 255, CV_THRESH_BINARY );
// get blobs
Mat labelImg; labelImg.create( gray.size(), IPL_DEPTH_LABEL ); // need to check if IPL_DEPTH_LABEL is the right type...not sure
CvBlobs blobs;
IplImage iplLabelImg = labelImg; // do not release this!
unsigned int result = cvLabel( gray, &iplLabelImg, blobs );
// render blobs in original image
IplImage iplMat = mat; // do not release this!
cvRenderBlobs( &iplLabelImg, blobs, &iplMat, &iplMat);
// for sake of compatibility with moosgummi:
cv::Mat output = mat;
你需要一个CvBlobs
的包装类,说类cvb::Blobs
,带有lazy_copy_refcounted私有CvBlobs数据和一些转换运算符到const CvBlobs和CvBlobs。还需要一个cvLabel的包装函数cvb::label()
,它为我们做C ++程序员的演员。