opencv - 用opencv突出地板上白色胶带的图像处理技巧

标签 opencv image-processing

我有以下图片:

Original

我想获得一个阈值图像,其中只有磁带是白色的,而整个背景是黑色的。到目前为止我已经试过了:

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)));

但我得到的这张图片,与我想要的相去甚远:

Thresholded image

胶带的颜色(白色)和宽度(约 2 厘米)始终相同,知道吗?谢谢

最佳答案

让我们看看你知道什么:

  • 磁带的对比度较低
  • 胶带比背景浅

如果您知道图片的比例,则可以在两个级别上运行自适应阈值。假设胶带的宽度为 100 像素:

  1. 拒绝亮度超出其周围 50x50(可能更小,但不会更大)窗口中的平均亮度 +/- x 的像素,并且

  2. 拒绝亮度小于 y + 周围 100x100(可能更大,但不能更小)窗口中的平均亮度的像素。

您还应该进行一些实验,尝试将均值和中位数作为每个阈值的“平均”定义。

从那里你应该有一个更好定义的图像,你可以删除除了最大的轮廓(大概是轨迹)之外的所有轮廓

关于opencv - 用opencv突出地板上白色胶带的图像处理技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17150024/

相关文章:

Python 将 base64 字符串绘制为图像

python - IPython Notebook 中的 OpenCV waitKey() 替代方案

c++ - OpenCV + VideoInput.lib 高清摄像头

c++ - 编译简单的openCV项目

c - bmp 文件处理

image - 计算图像中每行的像素数

C++。将 .dll 文件链接到项目

android - Android OpenCV-无法加载detection_based_tracker

matlab - Matlab中的图像处理/恢复

python - 如何在 python 中使用 opencv 模块可视化描述符匹配