我是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 Imgcodecs,BGR2GRAY
是用于函数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/