編集:私はこの答えで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 );