2012-05-06 2 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

저는 자바 프로그래머가 아니지만 코드에 두 가지 문제점이있을 수 있습니다. 첫째, 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

예. 아래 코드를 게시합니다. –