7

OpenCVのドキュメントから、cv :: findContoursのソース画像はconstとして取得されていますが、私のアプリケーションで何か奇妙なことが起こっています。cv :: inRange関数を使用して特定の色のしきい値処理された画像を取得し、その後、cv :: momentsを使用して、しきい値処理された画像の白いピクセルの中心を取得できます。これは正常に機能しています。

さらに、最大の輪郭を見つけ、その輪郭の中心モーメントを特定するためのコードを実装したいと思います。コードにcv::findContoursだけを追加した後、出力に奇妙な動作を見つけました。その後、このコードを使用してソースイメージで何が起こっているかを確認したいと思いました。

cv::Mat contourImage;
threshedImage.copyTo(contourImage); // threshedImage is the output from inRange
cv::findContours(threshedImage, contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE, cv::Point(0,0));
cv::Mat temp;
cv::absdiff(threshedImage,contourOutput, temp);
cv::namedWindow("absdiff");
cv::imshow("absdiff",temp);

この後、出力はthreshedImageとcontourImageの間に違いがあることを示しています。これはどのように可能ですか?cv :: findContoursで同様の結果が得られる人はいますか?

4

1 に答える 1

5

間違い! ドキュメントクリアには次のように記載されています。

ソース画像はこの関数によって変更されます。

したがって、元の画像をそのまま使用する必要がある場合は、この画像のコピーを作成して、コピーをに渡します cv::findContours()

于 2012-09-25T18:59:04.590 に答える