2017-01-05 24 views
0

私はインターネット上でopencv 2.xのJavaコード例が見つかりました。私はopencv 3.2を使用していて、イメージを読み込んで、xピクセルよりも長いすべての黒線を白にする(取り除く)ようにしています。ここで私は例をハフ変換のOpenCVの2.4バージョンから始まるからでてるところ...である画像処理opencv 3.0アサーションエラーが失敗しました

Mat img = Imgcodecs.imread("C:/Users/user1/Desktop/topdown-6.jpg"); 
    // Mat img = Imgcodecs.imread(fileName) 

    // generate gray scale and blur 
    Mat gray = new Mat(); 
    Imgproc.cvtColor(img, gray, Imgproc.COLOR_BGR2GRAY); 
    Imgproc.blur(gray, gray, new Size(3, 3)); 

    // detect the edges 
    Mat edges = new Mat(); 
    int lowThreshold = 50; 
    int ratio = 3; 
    Imgproc.Canny(gray, edges, lowThreshold, lowThreshold * ratio); 

    Mat lines = new Mat(); 
    Imgproc.HoughLinesP(edges, lines, 1, Math.PI/180, 50, 50, 10); 

    for(int i = 0; i < lines.cols(); i++) { 
     double[] val = lines.get(0, i); 
     Imgproc.line(img, new Point(val[0], val[1]), new Point(val[2], val[3]), new Scalar(0, 0, 255), 2); 
    } 

    Image edgesImg = toBufferedImage(edges); 
    Image linesImg = toBufferedImage(lines); 
    Image imgg = toBufferedImage(img); 

と私は自分の目標に向かってすべてのヘルプは次のようになり、エラーに

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor, file 

C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\imgproc\src\color.cpp, line 9748 
Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: C:\build\master_winpack-bindings-win32-vc14-static\opencv\modules\imgproc\src\color.cpp:9748: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor 
] 
    at org.opencv.imgproc.Imgproc.cvtColor_1(Native Method) 
    at org.opencv.imgproc.Imgproc.cvtColor(Imgproc.java:1778) 
    at Main.main(Main.java:174) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

を取得しています驚くばかり。私はopencv version 2.xを使うべきですか?

編集:

public Image toBufferedImage(Mat m){ 
    int type = BufferedImage.TYPE_BYTE_GRAY; 
    if (m.channels() > 1) { 
     type = BufferedImage.TYPE_3BYTE_BGR; 
    } 
    int bufferSize = m.channels()*m.cols()*m.rows(); 
    byte [] b = new byte[bufferSize]; 
    m.get(0,0,b); // ERROR HAPPENING HERE 
    BufferedImage image = new BufferedImage(m.cols(),m.rows(), type); 
    final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); 
    System.arraycopy(b, 0, targetPixels, 0, b.length); 
    return image; 
} 

答えて

1

問題は、あなたが後でそれを変換する必要はありませんので、あなたは、グレースケールとして画像をロードしているということです。 cvtColorは、BGR2GRAYを実行するときに、入力マットがカラーマットになることを期待します。

+0

パラメータを削除しました。同じエラー – Boutin

+0

パラメータをそのままにしてcvtColor行を削除するとどうなりますか? (また、入力としてimgを使うためにぼかしを変える) – brad

+1

私はそれを働かせました。解決策はパラメータImgcodecs.IMREAD_COLORを作成することでした。今私は、 "マットデータ型は互換性がありません:28"エラーが発生しているコードでは、マットをバッファリングされた画像に変換します。 toBufferedImage(mat)のために編集され、掲示されたコード。 – Boutin

関連する問題