15

OpenCV 2.1には、ROIを設定する関数cvSetImageROI()があったことは知っていますが、そのような関数は2.4には存在しません(または、少なくともそのマニュアルとヘルプセクションで見つけることができません)。

ただし、メイジのROIにopencv 2.4を使用する、私が見つけた唯一の役立つコードは次のとおりですが、理解するのに問題があります。

// define image ROI
cv::Mat imageROI;
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));
// add logo to image 
cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);

ここでは、元の画像の右下にある大きな画像に非常に小さなログを追加したいと考えています。

したがって、ここから理解できるのは、ROIを保持するために別のマトリックスが作成されるということです。その寸法はrect関数を使用して指定され、サイズは追加する小さなロゴのサイズと同じになります。

次に、これが私を混乱させるものです。cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);ここで、addWeightedのソース1はROIディメンションセットであり、ソース2はロゴであり、宛先はROIディメンションセットでもあります。これは正しいです?または私は何かが欠けていますか?

この後、大きな画像にロゴが追加された結果が表示されます。これらのコマンドのどこに大きなイメージが含まれていました。

また、ここで質問する前に、状況を明確にするために自分でコードを試してみたかったのです。しかし、image()が認識されないため、このエラーが発生します。'image': identifier not found

int _tmain(int argc, _TCHAR* argv[])
{
Mat src1, imageROI, logo;

logo = imread("c:\\car1.jpg", -1);

imageROI= image(Rect(385,270,logo.cols,logo.rows));

addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);


namedWindow("meh", CV_WINDOW_AUTOSIZE);
imshow("meh", imageROI);
waitKey(0);


return 0;

}

4

1 に答える 1

22
cv::Mat imageROI;
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));

cv :: Matコンストラクターは、パラメーターとして長方形を取ります。

Mat::Mat(const Mat& m, const Rect& roi)

長方形で指定された場所にある元の画像のROIを指す行列を返します。したがって、imageROIは、実際には元の画像「画像」の関心領域(またはサブ画像/部分行列)です。imageROIを変更すると、結果として元のより大きなマトリックスが変更されます。

あなたの例の場合、問題は、存在しないオブジェクト(画像)からコンストラクターを呼び出していることです。交換する必要があります:

imageROI= image(Rect(385,270,logo.cols,logo.rows));

に:

imageROI= src1(Rect(385,270,logo.cols,logo.rows));

src1が、ロゴを挿入する「大きな画像」であると想定します(ロゴはcar1.jpgです)。ちなみに、最初に大きな画像を読むことを忘れないでください!

于 2012-10-03T10:04:42.253 に答える