1

カメラで既知のシーンを認識するたびに使用する必要がある一連のマスク イメージがあります。すべてのマスク イメージは IplImage 形式です。たとえば、カメラがわずかに異なるが近くの場所にパンした場合があります。これは、現在のシーンのどこかでテンプレート マッチングを行うと、このシーンでテンプレートが多少ずれているシーンを認識できることを意味します。これらのシフトを使用してマスク イメージ ROI を調整し、テンプレート マッチングに基づいて適切にオーバーレイできるようにするだけです。次のような機能があることを知っています。

cvSetImageROI(Iplimage* img, CvRect roi)
cvResetImageROI(IplImage* img);

画像の切り抜き/切り抜きを設定するために使用できます。しかし、思ったようにやめられませんでした。誰かが代替案や私が間違っていること、または私が考えていなかったことさえ提案できれば、本当に感謝しています!

**画像サイズを常に同じに保つ必要があることも指摘しておく必要があります。唯一異なるのは、画像内の実際の関心領域です。おそらく、未使用の領域をカバーするためにゼロ/1のパディングを使用できます。

4

1 に答える 1

0

元の画像のコピーをあまり多く作成しない解決策は次のようになると思います。

// Make a new IplImage
IplImage* img_src_cpy = cvCreateImage(cvGetSize(img_src), img_src->depth, img_src->nChannels);

// Crop Original Image without changing the ROI
for(int rows = roi.y; rows < roi.height; rows++) {
    for(int cols = roi.x; rows < roi.width; cols++) {        
        img_src_cpy->imageData[(rows-roi.y)*img_src_cpy->widthStep + (cols-roi.x)] = img_src[rows*img_src + cols];
    }
{

//Now copy everything to the original image OR simply return the new image if calling from a function
cvCopy(img_src_cpy, img_src); // OR return img_src_cpy;

コードを試してみましたが、十分に高速です(332 x 332グレースケール画像の場合は約1ミリ秒で実行されます)

于 2013-03-10T22:00:33.067 に答える