ImageManipulationsActivity.VIEW_MODE_BINARY:
capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
Mat binary = new Mat();
Imgproc.cvtColor(mRgba,binary, Imgproc.COLOR_RGBA2GRAY, 4);
int size = (int) binary.total() * binary.channels();
double[] buff = new double[size];
binary.get(0, 0, buff);
for(int i = 0; i < size; i++)
{
buff[i] = (buff[i] >= 0) ? 1 : 0;
}
Mat bv = new Mat(binary.size(), CvType.CV_8U);
bv.put(0, 0, buff);
Imgproc.cvtColor(binary, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
break;
上面的代码用于在opencv4android中对灰度图像进行二值化,但是直到知道这对我不起作用,我从这里复制上面的代码,在上面的代码中,我尝试:
- 使用以下方法检索 Mat 图像:capture.retrieve
- 使用 Imgproc.cvtColor 将图像转换为灰度
- 像上面的代码一样使用 Java Primitive Array 进行二值化
- 然后从灰色转换回 rgba
- 使用位图 bmp 显示结果
如果你有什么建议,请告诉我。我不知道我从上面的代码中错了什么,它没有错误,但是当我安装应用程序并运行它时,它总是强制关闭。
这是来自应用程序的 logcat:
致命异常:Thread-10 java.lang.UnsupportedOperationException:Mat 数据类型不兼容:org.opencv.core.Mat.get(Mat.java:2042) 的 org.opencv.samples.imagemanipulations.ImageManipulationsView.processFrame( ImageManipulationsView.java:158) at org.opencv.samples.imagemanipulations.SampleCvViewBase.run(SampleCvViewBase.java:99) at org.opencv.samples.imagemanipulations.ImageManipulationsView.run(ImageManipulationsView.java:195) at java.lang.Thread.run(Thread.java:1019)