2011-11-03 10 views
12

私はアンドロイドでOpenCV 2.3.1を使用しています。イメージを半分にする必要があります。 私は何をやっていることはopencvを使ってアンドロイドで画像を切り取る

Mat mIntermediateMat2 = new Mat(frame_height,frame_width,rgba.type); 
    mIntermediateMat2 = rgba.clone(); 
    mIntermediateMat2 = mIntermediateMat2.rowRange(0,frame_height/2); 

である第3のステップは仕事をするか、私はもっと何かを追加する必要がありますか? OpenCv 2.3のドキュメントでMat :: operator()を見ましたが、残念ながらopencvアンドロイドパッケージで見つけることができませんでした。

+2

は、あなたはそれをあなたが上記の提案方法をやってみました、それが動作しませんでしたか? –

答えて

18

Matクラスのコンストラクタがいくつかありますが、そのうちの1つはMatとROI(関心領域)を取ります。ここで

は、Android/Javaでそれを行う方法は次のとおりです。

Mat uncropped = getUncroppedImage(); 
Rect roi = new Rect(x, y, width, height); 
Mat cropped = new Mat(uncropped, roi); 
+1

ちょうどroiを明らかにする。 x、yはroiとして設定したい矩形の開始位置、width-heightは矩形の幅 - 高さです。画像の幅 - 高さではありません。たとえば、320 * 240の画像があり、その画像を2つの新しい画像に分割したい場合などです。最初のroiはRect roi = new Rect(0、0、width/2、height)になります。 2番目のRect roi =新しいRect(160,0、width/2、height)。 –

+0

素敵な答え.... – Aniket

+0

idkなぜかこの論理は私に例外を与えている – Fay007

2

私はいつもこのようにクロップ行っている:

Mat image = ...; // fill it however you want to 
Mat crop(image, Rect(0, 0, image.cols, image.rows/2)); // NOTE: this will only give you a reference to the ROI of the original data 

// if you want a copy of the crop do this: 
Mat output = crop.clone(); 

希望に役立つこと!

+0

ご協力ありがとうございます。フィーチャの検出にMat cropを使用して、出力せずにクローン化する場合。 opencvは作物の部分や完全な画像の特徴を探しますか? – akniazi

0

見えるものはcv::getRectSubPixです。さらに、必要以上のスペースを割り当てる必要はありません。また、切り抜かれた領域が正確なピクセルの上に揃えられていない場合は、必要な補間を行います。

これは、必要な操作を行う必要があります。入力タイプは出力タイプになります。

Mat dst; 
getRectSubPix(src, Size(src.rows()/2,src.cols()), Point2f(src.rows()/4, src.cols()/2), dst); 
関連する問題