2016-11-15 4 views
0

imageと呼ばれる100x100 cv::Mat1bがあります。それから私は実行します。cv :: Mat_はROIを維持していますか?

cv::Mat1b subImage = image(cv::Rect(0,0,49,49)); 

subImageimageの左上隅を取得するには。次に、関数cv::findContourssubImageを渡します。結果の等高線はimageまたはsubImageに相対的なものになりますか?つまり、findContours()は実際にはsubImageがサブ画像であることを知っていますか?または、すべてのOpenCV関数は、このようにして「フルイメージ」として抽出されたsubImageを処理します。次に、抽出された領域のコーナーを輪郭ピクセルの各座標に追加するのは呼び出し元の責任です(この例の場合)。オリジナルで解釈された輪郭image

答えて

1

サブイメージは完全なイメージとして扱われ、サブイメージで呼び出される関数は完全なイメージではないことを認識しません。輪郭座標が全画像に対して返される別の方法としては、単にあなたのようにサブ画像を宣言した場合、各輪郭点

+0

ああを指していないsubImageを持っています面白い。デフォルトでは、画像がサブ画像であるとは思わないでしょうが、それを確認することは良いことです。 –

+0

@DavidDoriaでは、関数はサブイメージを異なる方法で処理しません(データはサブイメージであることを判断するために存在します)。findcontourは特殊なケースです。輪郭 –

1

にオフセットを追加できるように

findcontour機能しかしROIの座標のオプションのパラメータを取るん:次いで

Mat1b subImage = image(cv::Rect(0,0,49,49)); 

subImageは、任意のOpenCVの関数によって完全マットオブジェクトとして説明します。 subImageで行われた変更は、imageの対応する部分にも反映されます。

あなたはimageからsubImageで行われた変更を除外したい場合は、あなたが使用する必要があります。

Mat1b subImage = image(cv::Rect(0,0,49,49)).clone(); 

今、あなたは、私は今、その引数を参照してください、image

関連する問題