2016-06-23 6 views
1

私はopenCV 2.4 verを使ってプロジェクトをやっています。 C++ イメージの一部をトリミングして別のマトリックスに保存したいと思います。 cropped_imageは、ループごとに新しい単一の切り抜かれたイメージを取得する代わりに、以前のイメージを保持し、前のイメージの横に構築し続けます。私は..異なる行列の画像の一部を切り取る方法ですが、行列はopenCVでサイズを変更しません。

私が間違って何をしたかわからなかった。また、これはとき、N = 64、M = 240の停止をループし、私も理由を理解していない...

誰も私を助けることができますか?

OpenCVの2.4VのC++ OpenCVのドキュメントに基づいて

using namespace cv; 
using namespace std; 

original_image = imread("image.jpg",1); 
int n, m, cols_ss, rows_ss; 
int cols = 640; 
int rows = 480; 
cols_ss = 64 // arbitrary number; 
rows_ss = 48 // arbitrary number; 
Mat cropped_image; 

for (n = 0; n < cols - cols_ss; n = n + cols_ss) { 
    for (m = 0; m < rows - rows_ss; m = m + rows_ss) { 

     // initialize cropped_image as zeros. 
     Mat cropped_image(cols_ss, rows_ss, CV_8UC1, Scalar::all(0)); 

     // Crop a small part of an original_image to cropped_image. 
     cropped_image = original_image(Rect(n, m, n + cols_ss, m + rows_ss)); 

    } 
} 

答えて

0

RectのコンストラクタはRect(x, y, width, height)です。 cropped_image = original_image(Rect(n, m, cols_ss, rows_ss));を意味するものではありませんか?

ROI関数は、ポインタを介して画像内の領域に1:1のマッピングを与えます。

Mat cropped_image(original_image, Rect(n, m, cols_ss, rows_ss)); 

これはcropped_imageのサイズは、ROIのRectによって決定されていることを確認します:確かcropped_imageが意図し、使用のようであることを確認する別の方法。

+0

ご意見ありがとうございます。私は "n + cols_ss"から "cols_ss"に変更した後に何のエラーも受けなかった。 しかし、切り取った画像が動き回っていないように見えました。 imshow( "temp_window"、cropped_image)でイメージを表示したとき。イメージをスキャンするのではなく、同じイメージを再び表示しました... –

+0

'for'ループで' n + cols_ss'を変更しましたか?貴方はするべきではない。 –

+0

いいえ、私は同じループをforループに保ちました。 次のコードを追加して、ピクセル単位の変化を確認しました。 \t \t \t f1_patch = sum(cropped_image)[0]; \t \t \t cout << "f1は" << f1_patch << endl; –

関連する問題