我有以下图片:
我想获得一个阈值图像,其中只有磁带是白色的,整个背景都是黑色的..到目前为止,我已经尝试过了:
Mat image = Highgui.imread("C:/bezier/0.JPG");
Mat byn = new Mat();
Imgproc.cvtColor(image, byn, Imgproc.COLOR_BGR2GRAY);
Mat thresh = new Mat();
// apply filters
Imgproc.blur(byn, byn, new Size(2, 2));
Imgproc.threshold(byn, thresh, 0, 255, Imgproc.THRESH_BINARY+Imgproc.THRESH_OTSU);
Imgproc.erode(thresh, thresh, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(4, 4)));
但是我得到了这张图片,远离我的想法:
胶带总是具有相同的颜色(白色)和宽度(约2cm),任何想法?感谢
答案 0 :(得分:2)
让我们看看你所知道的:
如果您知道图片的比例,则可以在两个级别上运行自适应阈值。假设磁带的宽度为100像素:
拒绝亮度超出+/- x的像素,距离围绕它的50x50(可能更小但不大)窗口的平均亮度
拒绝亮度小于y的像素+围绕它的100x100(可能更大但不小)窗口的平均亮度。
您还应该尝试一下,尝试将均值和中位数作为每个阈值的“平均值”定义。
从那以后你应该有一个更好定义的图像,你可以删除除最大轮廓之外的所有轮廓(可能是轨迹)
答案 1 :(得分:1)
我认为你没有利用磁带是白色的事实(地板是棕色的)。
不要使用cvtColor(src, dst, Imgproc.COLOR_BGR2GRAY)
转换为灰度,而是尝试使用会影响饱和度的自定义操作...也许就像转换为HSV并让G = V * (1-S)
。