在[android] opencv中的分水岭示例

时间:2013-03-24 17:40:38

标签: android image opencv image-processing

目前正在尝试

<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项目。

2 个答案:

答案 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);