3

目前正在尝试

<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 边缘检测中的标记来提供分水岭算法?Android-specifics 会很有帮助,因为这是我的第一个 Android 项目。

4

2 回答 2

4

该错误表明输入图像watershed()必须是8 位 3 通道图像。调用后cvtColor(),打印的通道数threeChannel如果它输出1,请不要感到惊讶。

mRgba直接通过,watershed()看看会发生什么。我以前的答案之一是使用 watershed 的工作代码,您可以将其用于测试。

于 2013-03-24T18:49:50.413 回答
1

您只需将图像从 4 通道转换为 3 通道。例如

Imgproc.cvtColor(mat , mat, Imgproc.COLOR_BGRA2BGR);
于 2015-08-07T16:50:33.600 回答