4

祝福になり得るCvBlobsLibを発見しましたが、残念ながらIplImageを使用しています。
新しいcv::Matスタイルのエディションがある可能性はありますか?私はそれを見つけることができませんか?

編集:

たまたま2つの異なるライブラリ、CvBlobsLibとCvBlobs、yeehaaを発見したことがわかりました。:)
CvBlobsLibはcvBlobsよりも使用されていないことがわかりました。これは、opencv willowgarageではなく、googleコードにあります。ただし、どちらもIplImageで動作するため、両方のライブラリの回答を歓迎します。:)

4

2 に答える 2

5

編集:私はこの答えでcvBlobsについて話している、私がcvBlobsLibでそれを台無しにしたことを残念に思う...

私もこれを探していましたが、新しい画像構造を使用するライブラリは思いつきませんでした。

しかし、実際にはいつでもこれを行うことができます。必要な場所IplImage iplImg = mat;で使用できます。&iplimgIplImage*

私はいくつかのプロジェクトでこのように成功した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 );
于 2012-11-23T10:27:34.200 に答える
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;

また、lazy_copy_refcountedプライベートCvBlobsデータとconstCvBlobsおよびCvBlobsへの変換演算子を含むCvBlobsクラスのラッパークラスが必要です。また、C++プログラマーのためにキャストを行うcvb::BlobscvLabelのラッパー関数も必要でした。cvb::label()

于 2012-11-23T13:07:06.053 に答える