1

C での画像操作に OpenCV を使用しています。この質問がドキュメントで回答されている場合はご容赦ください。ただし、OpenCV ドキュメントの形式がかなり悪く、読みにくいことがわかりました。

CvMat*以下のように画像ファイルから抽出したものがあります。

CvMat* mat = cvLoadImageM((char*) filename, CV_LOAD_IMAGE_COLOR);

私がする必要があるのは、特定の境界領域を切り取って、そのサブイメージを取得することです。このための論理コマンドは次のようになります。

CvMat* subMat = cvGetSubImage(mat, minx, maxx, miny, maxy);

ここminxで、maxxminymaxyはトリミングされた領域の境界を定義します。これを簡単に行うための組み込みの方法はありますか?

4

3 に答える 3

8

http://nashruddin.com/OpenCV_Region_of_Interest_(ROI)/をご覧ください。

チュートリアルでは、関心領域で次のことを行います。

cvSetImageROI(img1, cvRect(10, 15, 150, 250));
IplImage *img2 = cvCreateImage(cvGetSize(img1),
                           img1->depth,
                           img1->nChannels);
cvCopy(img1, img2, NULL);
cvResetImageROI(img1);

OpenCV には、関心のある領域を設定し、その領域をイメージからコピーするための機能が組み込まれています。

于 2012-07-30T16:56:25.550 に答える
2

ROI通常、これは(対象領域) をトリミングすることによって行われます。このブログ投稿では、クロッピングについて詳しく説明しています。

/* load image */
IplImage *img1 = cvLoadImage("elvita.jpg", 1);

/* sets the Region of Interest
   Note that the rectangle area has to be __INSIDE__ the image */
cvSetImageROI(img1, cvRect(10, 15, 150, 250));

/* create destination image
   Note that cvGetSize will return the width and the height of ROI */
IplImage *img2 = cvCreateImage(cvGetSize(img1),
                               img1->depth,
                               img1->nChannels);

/* copy subimage */
cvCopy(img1, img2, NULL);

/* always reset the Region of Interest */
cvResetImageROI(img1);

IplImage(レガシー OpenCV) と(OpenCV 2.x)の間で変換するにはcvMat、単にcvMatコンストラクターを使用するか、この質問を参照してその他のメソッドを確認してください。

于 2012-07-30T16:55:41.667 に答える