java - 为什么我的BGR2GRAY Mat在基本阈值函数中返回蓝色? [OPENCV]

标签 java android opencv threshold

我是stackoverflow的新手,如果我做错了我会真诚的为我的格式道歉(请不要犹豫,告诉我要解决的问题)。

我正在尝试从原始图片创建图像分割,它为绿叶返回白色背景和蓝色。我期待该功能有黑白像素,但我真的不知道我是否做对了。

我想将BGR2GRAY Mat对象用作原始对象的标记,尝试将叶子与背景分离。这是我的代码。

    // IMAGE SEGMENTATION USING WATERSHED ALGORITHM //
    //Create a Mat Object using originalPicture as is:

    //Create an instance of Mat Object using originalPicture as BGR2GRAY:
    Mat imageSegmentationMat = Imgcodecs.imread(originalFilePathStr, Imgproc.COLOR_BGR2GRAY);
    //Use basic threshold for imageSegmentationMat:
    Imgproc.threshold(originalPicMat,imageSegmentationMat, 86,255, Imgproc.THRESH_BINARY);
    //test:
    Bitmap imageSegmentationBmp = Bitmap.createBitmap(imageSegmentationMat.cols(), imageSegmentationMat.rows(),Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(imageSegmentationMat, imageSegmentationBmp);
    imgView_segmentation.setImageBitmap(imageSegmentationBmp);

我期望只能像在OpenCV教程中看到的那样获得黑白图像。任何人都可以通过解释发生的事情来帮助我吗?谢谢。

这是我的输出的屏幕截图:
http://imageshack.com/a/img924/8520/qPaMdX.png

更新:
我忘了告诉我我正在关注有关图像分割的this教程,而这行是我遇到问题的地方:
ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)

我只需要将其转换为java(本教程是用phyton编写的,尽管它看起来很容易阅读,但我对它的知识却为零。)
Imgproc.threshold(grayscaleMat,testThresholdMat,0,255, Imgproc.THRESH_BINARY_INV+Imgproc.THRESH_OTSU);

所以回答我的问题是:
我的阈值函数缺少THRESH_OTSU,这会造成问题。
而且我还应该阅读更多文档。

我真的应该感谢stackoverflow中的那些积极帮助人们的人们。我爱这个地方<3

最佳答案

未读标志似乎是错误的。我认为应该是IMREAD_GRAYSCALE from ImgcodecsBGR2GRAY是用于函数cvtColor

所以应该是

Mat imageSegmentationMat = Imgcodecs.imread(originalFilePathStr, Imgcodecs.IMREAD_GRAYSCALE);

更新:

您可能需要在位图之前将其转换为RGBA(也许是bug?)
Imgproc.cvtColor(imageSegmentationMat, tmp, Imgproc.COLOR_GRAY2RGBA, 4);

关于java - 为什么我的BGR2GRAY Mat在基本阈值函数中返回蓝色? [OPENCV],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45958153/

相关文章:

java - 空指针异常是否会导致 android 应用程序的性能?

python - 如何使用Python和DLib找到在线左侧或右侧的点?

java - 为什么调用 CallStaticVoidMethod 在 JNI 中抛出使用无效的 jobject

java - 何时使用 org.springframework.context.event.EventListener 和 org.springframework.cloud.stream.annotation.StreamListener

android - 为 map 添加边界以避免在某个区域之外滑动

android - PropertyValuesHolder : Couldn't find setter/getter for property <property-name> with value type float

opencv透视变换函数异常

c++ - 如何在 LabVIEW 的 DLL 中打开 OpenCV 结构化边缘检测器的模型文件?

java - 为 tomcat-apache、axis2、jdk 设置 ubuntu 服务器

java - 在基本的 Java POJO 中,log4j.Logger 是否过大?