目前正在尝试
<code>
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
Imgproc.Canny(mRgba, markers, 80, 90);
Mat threeChannel = new Mat();
Imgproc.cvtColor(mRgba, threeChannel, Imgproc.COLOR_BGR2GRAY);
Imgproc.watershed(threeChannel, markers);
return threeChannel;
}
</code>
然而,它失败了
CvException [org.opencv.core.CvException: /home/reports/ci/slave/50-SDK/opencv/modules/imgproc/src/segmentation.cpp:147: error: (-210) Only 8-bit, 3-channel input images are supported in function void cvWatershed(const CvArr*, CvArr*)
您能否建议如何正确使用Canny / Sobel边缘检测中的标记来提供Watershed算法?特定于Android的内容非常有用,因为这是我的第一个Android项目。
答案 0 :(得分:4)
错误指出watershed()
的输入图像必须是 8位3通道图像。致电cvtColor()
后,打印threeChannel
的频道数。如果输出 1 ,请不要感到惊讶。
将mRgba
直接传递给watershed()
,看看会发生什么。我之前的一个答案是working code using watershed,您可以将其用于测试。
答案 1 :(得分:1)
您只需将图片从4个频道转换为3个频道即可。 例如
Imgproc.cvtColor(mat , mat, Imgproc.COLOR_BGRA2BGR);