Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OpenCv HoughCircles_Android_Opencv - Fatal编程技术网

Android OpenCv HoughCircles

Android OpenCv HoughCircles,android,opencv,Android,Opencv,我正在尝试使用android opencv 2.3.1识别图像中的圆圈(硬币)。 但是,执行Imgproc.cvtColor方法会出现错误(org.opencv.cvException) File imgFile=新文件(Environment.getExternalStorageDirectory()+“/test.jpg”); imageBmp=BitmapFactory.decodeFile(imgFile.getAbsolutePath()); Mat mImg=新Mat(); mImg

我正在尝试使用android opencv 2.3.1识别图像中的圆圈(硬币)。 但是,执行Imgproc.cvtColor方法会出现错误(org.opencv.cvException)

File imgFile=新文件(Environment.getExternalStorageDirectory()+“/test.jpg”);
imageBmp=BitmapFactory.decodeFile(imgFile.getAbsolutePath());
Mat mImg=新Mat();
mImg=Utils.bitmapToMat(imageBmp);
Mat mGray=new Mat(mImg.rows(),mImg.cols(),CvType.CV_8UC1,新标量(0));
Imgproc.cvtColor(mImg、mGray、Imgproc.COLOR\u BGRA2GRAY,4);
麦格洛克·高斯蓝(麦格雷,麦格雷,新尺寸(9,9),2,2);
垫圆=新垫();
Imgproc.HOUGH圆(mGray,圆,Imgproc.CV_-HOUGH_梯度,1d,(双精度)
管理层高度()/70200d,100d);
我做错了什么? 手机:三星Galaxy S i9000


只是用新代码更新我的问题。它仍然通过“Imgproc.cvtColor”方法给出相同的错误


我不是一个Java程序员,但可以看到您的代码中存在两个问题。首先,cvtColor()中最后一个参数的值不应为4。改变这个

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

Imgproc.cvtColor(mImg , mGray, Imgproc.COLOR_BGRA2GRAY);
因为它正在从BGRA转换为灰度,所以它知道目标(
mGray
)是单通道

其次,为什么要将
新标量(0)
传递给

Mat mGray = new Mat(mImg.rows(), mImg.cols(), CvType.CV_8UC1, new Scalar(0));
??那可能把事情搞砸了。我将调用为映像分配内存的构造函数:

Mat mGray = new Mat(mImg.rows(), mImg.cols(), CvType.CV_8UC1);
编辑:现在的问题可能是您读取图像并转换为
Mat
的方式。我会替换这个

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

Mat mImg = Highgui.imread(imgFile.getAbsolutePath());
然后确保
mImg.rows()
返回正确的值。
请告诉我进展如何。

您能更新您的问题吗?也许只是添加新的修订代码,让我们看看它现在的样子。
Mat mImg = Highgui.imread(imgFile.getAbsolutePath());