2012-05-06 10 views
1

私はandroid-opencv 2.3.1を使ってイメージ内の円(コイン)を認識しようとしています。 しかし、Imgproc.cvtColorメソッドを実行するとエラーが発生します(org.opencv.cvException)。Android OpenCv HoughCircles

File imgFile = new File(Environment.getExternalStorageDirectory() + "/test.jpg"); 
imageBmp = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 

Mat mImg = new Mat(); 
mImg = Utils.bitmapToMat(imageBmp);   
Mat mGray = new Mat(mImg.rows(), mImg.cols(), CvType.CV_8UC1, new Scalar(0)); 
Imgproc.cvtColor(mImg , mGray, Imgproc.COLOR_BGRA2GRAY, 4); 
Imgproc.GaussianBlur(mGray , mGray , new Size(9, 9), 2, 2); 
Mat circles = new Mat(); 
Imgproc.HoughCircles(mGray , circles, Imgproc.CV_HOUGH_GRADIENT, 1d, (double) 
        mGray.height()/70, 200d, 100d); 

私は間違っていますか? 携帯電話:ちょうど新しいコードで私の質問を更新サムスンギャラクシーS i9000の


。 "Imgproc.cvtColor"メソッドでも同じエラーが発生しています。

File imgFile = new File(Environment.getExternalStorageDirectory() + "/test.jpg"); 
imageBmp = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
Mat mImg = new Mat(); 
mImg = Utils.bitmapToMat(imageBmp); 
Mat mGray = new Mat(mImg.rows(), mImg.cols(), CvType.CV_8UC1); 
Imgproc.cvtColor(mImg, mGray, Imgproc.COLOR_BGRA2GRAY); 
Imgproc.GaussianBlur(mGray, mGray, new Size(9, 9), 2, 2); 
Mat circleImage = new Mat(mGray.rows(), mGray.cols(), CvType.CV_8UC1); 
Imgproc.HoughCircles(mGray, circleImage, Imgproc.CV_HOUGH_GRADIENT, 1d, 
     (double) mGray.height()/70, 200d, 100d); 

答えて

2

私はJavaプログラマではありませんが、コードに2つの問題があります。まず、cvtColor()の最後の引数の値はmGray(グレースケールにBGRAから変換していますので、この

Imgproc.cvtColor(mImg , mGray, Imgproc.COLOR_BGRA2GRAY); 

にこの

Imgproc.cvtColor(mImg , mGray, Imgproc.COLOR_BGRA2GRAY, 4); 

が、それは先を理解4.変更することshoudn't )は単一チャネルです。

第二に、なぜあなたは

Mat mGray = new Mat(mImg.rows(), mImg.cols(), CvType.CV_8UC1, new Scalar(0)); 

new Scalar(0)を渡していますか?それはおそらく物事を台無しにしている。

Mat mGray = new Mat(mImg.rows(), mImg.cols(), CvType.CV_8UC1); 

編集:は今、おそらく問題は、あなたが画像を読み取り、Matに変換している方法である私は、画像のためのメモリを割り当てコンストラクタを呼び出します。私はこの

Mat mImg = Highgui.imread(imgFile.getAbsolutePath()); 

することにより、この

imgFile.getAbsolutePath() 
mImg = Utils.bitmapToMat(imageBmp); 

を交換し、その後mImg.rows()が正しい値を返すことを確認します。 どうすればいいか教えてください。

+0

変更を加えましたが、引き続き同じエラーが発生しています。 –

+0

質問を更新できますか?新しい改訂コードを追加して、今見ているように見えるかもしれません。 – fireant

+0

私は下に私のコードを掲載します。 –