0

私はカメラから写真を撮らなければならないアプリケーションを開発しています。その後、写真のエッジスクエア(ドキュメントページのようなもの)を検出します...長い検索の後、これを達成するためのOpenCVライブラリを見つけ、正常にインポートしましたAndroid用のJavaライブラリですが、問題は、opencvのメソッドを呼び出してSquareを検出するときです(メソッドは

Imgproc.findContours(converted、contours、hierarchy、Imgproc.CHAIN_APPROX_SIMPLE、Imgproc.RETR_LIST) )..それは私に与える

例外... OpenCV エラー: _CvContourScanner* cvStartFindContours(void*, CvMemStorage*, int, int, int, CvPoint) 内のサポートされていない形式または形式の組み合わせ (FindContours は 8uC1 および 32sC1 画像のみをサポート)、ファイル /home/reports/ci/スレーブ/50-SDK/opencv/modules/imgproc/src/contours.cpp、196 行目

私はあなたにいくつかのコードを送ります------------------------------------------- -----------

public void convertImage() {

    Mat ori = new Mat();
    Mat converted = new Mat(200, 200, CvType.CV_8UC1, new Scalar(0));

    try {
        ori = Utils.loadResource(MainActivity.this, R.drawable.ic_launcher, Highgui.CV_LOAD_IMAGE_COLOR);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Imgproc.cvtColor(ori,  converted, Imgproc.COLOR_RGB2GRAY, 4);  // convert Image to grayscale
    Imgproc.threshold(ori, converted, 50, 250, Imgproc.ADAPTIVE_THRESH_MEAN_C); // threshold the image

    List<MatOfPoint> contours = new ArrayList<MatOfPoint>(10);
    Mat hierarchy = new Mat(200, 200, CvType.CV_32FC1, new Scalar(0));

    Imgproc.findContours(converted, contours, hierarchy,Imgproc.CHAIN_APPROX_SIMPLE,Imgproc.RETR_LIST);

    ImageView frame = (ImageView) findViewById(R.id.imageView1);

    Imgproc.cvtColor(converted, converted, Imgproc.COLOR_GRAY2RGBA, 4); // convert Image back to RGB
    Bitmap bmp = Bitmap.createBitmap(converted.cols(), converted.rows(), Bitmap.Config.ARGB_8888);




    frame.setImageBitmap(bmp);
    }

どんな助けでも感謝します------------------ 事前に感謝します

4

3 に答える 3

3

In 'cvFindCounters' 最初の引数は入力画像です。このイメージは 8 ビットのシングル チャネル イメージである必要があり、バイナリとして解釈されます。そのため、4 チャンネルの画像を渡す代わりに、単一のチャンネルの画像を渡す必要があります。

これはあなたのために働くはずです。
Imgproc.cvtColor(ori, 変換済み, Imgproc.COLOR_RGB2GRAY, 1 );

于 2015-01-02T05:15:29.640 に答える
0

最初にビットマップを次のようにロードします-

Bitmap icon = BitmapFactory.decodeResource(context.getResources(),
                                       R.drawable.ic_launcher);

次に、ビットマップをマットに変換します -

Mat m = new Mat();
Utils.bitmapToMat(icon, m);
Imgproc.cvtColor(m, m, Imgproc.COLOR_RGB2GRAY, 1);

上記のようにしきい値を実行し、輪郭を見つけます..基本的な考え方は、ビットマップを単一チャネルであるマットに変換することです..

于 2013-05-23T12:46:22.550 に答える