JavaCV中的阈值图像
我按照几个步骤对使用相机拍摄的图像进行阈值处理。但是一半的图像变黑了。我尝试了几种类型的阈值算法,而不是它们的工作原理。 我用于阈值处理的代码如下:
cvCvtColor(src, colorDst, CV_GRAY2BGR);
cvThreshold(colorDst, threshold, 155, 255, CV_THRESH_BINARY);
//cvThreshold(colorDst, threshold, 155, 255, CV_THRESH_OTSU); // code didnt work in javaCV
是否有任何算法可以正确地对使用相机拍摄的整个图像进行阈值处理?
原始图片
阈值图像
答案 0 :(得分:0)
此图像的阈值= 155太高 - 右侧较暗,因此变为黑色 最佳值约为120(您可以使用例如GIMP颜色选择器找到它。)
如果要自动计算阈值,请使用THRESH_OTSU或THRESH_TRIANGLE。不要使用BGR图像,此功能仅适用于灰度图像。
如果使用三角形算法将此图像作为灰度图像阈值,它将产生阈值= 117并且图像将被正确设置阈值(OpenCV-3.0b的代码):
Mat src = Imgcodecs.imread("res/test.jpg", Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
Mat dst = new Mat();
double threshold = Imgproc.threshold(src, dst, 0, 255, Imgproc.THRESH_TRIANGLE);
Imgcodecs.imwrite("res/out.jpg", dst);
System.out.println(threshold); // 117