4

Java で OpenCV を使用して (ネイティブではなく)、Android でテンプレート マッチング関数を作成しようとしています。

私の問題は画像を表示することです。クラスmattoBitmapは (Java で) 動作しますが、テンプレート マッチング関数の結果を変換したい場合は、関数FATAL EXCEPTIONを呼び出したときにを取得しUtils.matToBitmapます。

以下は関連するコードです。

void TemplateMatch() {

    mFind = new Mat(256, 192, CvType.CV_8UC4);
    Input = new Mat(256, 192, CvType.CV_8UC4);

    mResult = new Mat(217, 153, CvType.CV_8UC4); // (bmp2 size is 40)

    Utils.bitmapToMat(bmp2, mFind);
    Utils.bitmapToMat(bmp1, Input);

    Imgproc.matchTemplate(mFind, Input, mResult, Imgproc.TM_SQDIFF);

    bmp3 = Bitmap.createBitmap(mResult.cols(), mResult.rows(), conf);

    Utils.matToBitmap(mResult, bmp3);

    iv2.setImageBitmap(bmp3);

}

私の知る限り、mResult のサイズは、後でテンプレート マッチ関数によって設定されるため、作成時には重要ではありません。

mResult マットをbmpに変換する前に何かに変換する必要がありますか?

マットを bmp に変換する前に、 bmpを何かに変換する必要がありますか?

4

2 に答える 2

2

ビットマップを RGBA 形式に、またはその逆に変換する必要があります。たぶん、ここを見る必要があります: https://groups.google.com/group/android-opencv/とここ: Java openCV - ビットマップをマットに変換中にエラーが発生しました

于 2012-12-16T12:00:57.887 に答える
2

問題は、matchTemplate()結果が浮動小数点の単一チャネル Mat であるため、mResult ベクトルを正規化する必要があることです。解決策は次のとおりです。

void TemplateMatch(){

mFind=new Mat(256, 192, CvType.CV_8UC4); 
Input = new Mat(256, 192, CvType.CV_8UC4); 

Mat mResult8u = new Mat(256, 192, CvType.CV_8UC4); 

mResult = new Mat(217, 153, CvType.CV_8UC4); 

Utils.bitmapToMat(bmp2, mFind);
Utils.bitmapToMat(bmp1, Input);


Imgproc.matchTemplate(mFind, Input, mResult, Imgproc.TM_SQDIFF) ;
bmp3= Bitmap.createBitmap(mResult.cols(),  mResult.rows(),Bitmap.Config.ARGB_8888);
Core.normalize(mResult, mResult8u, 0, 255, Core.NORM_MINMAX, CvType.CV_8U);
Utils.matToBitmap(mResult8u, bmp3);
iv2.setImageBitmap(bmp3);

}
于 2012-12-18T09:30:29.837 に答える