问题标签 [image-thresholding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
328 浏览

python - 如何知道我是否需要在 findContour 之后反转阈值类型

我正在使用 OpenCV 进行手部检测。但是我在尝试脱粒图像的轮廓时很挣扎。findContour将始终尝试找到白色区域作为轮廓。

所以基本上它在大多数情况下都有效,但有时我的脱粒图像看起来像这样:

_, threshed = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU) 根据 在此处输入图像描述

因此,要使其正常工作,我只需要更改阈值类型cv2.THRESH_BINARY_INV

_, threshed = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)

逆转 绘制轮廓

而且效果很好。

我的问题是如何确定何时需要反转阈值?我是否需要始终在两个脱粒图像上找到轮廓,并比较结果(我这种情况如何?)?或者有一种方法可以缓解知道轮廓是否没有完全丢失。

编辑:有一种方法可以 100% 确定轮廓看起来像一只手吗?

编辑2:所以我忘了提到我正在尝试使用这种方法检测指尖和缺陷,所以我需要缺陷,在第一个脱粒图像中我找不到它们,因为它颠倒了。见第一轮廓图像上的蓝点。

谢谢。

0 投票
1 回答
885 浏览

python - 如何找到钻头等金属零件的确切边缘/二进制阈值?

我是 OpenCV 和 python 的新手,所以请像 12 年级学生一样帮助我。我的问题是我想检测钻头的正确阈值或边缘以进行测量,但是我所做的在图像中产生了很多噪声,因此我无法找到对象的正确轮廓

我尝试去除图像中的眩光,然后进行直方图均衡,然后尝试自适应阈值。

我的预期结果应该看起来像我用边界所需图像绘制的图片,但我得到的是这样的不想要的图像

0 投票
0 回答
50 浏览

python-3.x - 图像轮廓区域迭代计算器

我正在尝试找到轮廓蒙版的填充区域。它只是为 33 个轮廓产生相同的值。

这是在将灰度图像阈值化为 0 和 255 之后:

结果:

0 投票
0 回答
75 浏览

image-processing - 我想提高二值图像的准确性

我使用 Otsu 阈值将灰度 img 转换为二进制。但是准确率不是很高,我想提高一下。

从 matplotlib 导入 cv2 将 pyplot 导入为 plt

定义主():

如果名称== “”:主()

这是原始图像

这是我使用我的代码得到的二进制 img

这是直方图

0 投票
0 回答
45 浏览

python - 关于如何在 OCR 之前从 IMAGE 中过滤掉通知的指南

我一直在用 python 对图像进行 OCR 处理,但仍有改进的余地,因此您的输入和想法会有所帮助。

这就是我目前正在做的事情,成功获得有效 ocrText 输出的比例约为 15%。

当我试图取得进展时,我发现了一个“opencv-color-spaces”博客,它使用下面的代码将图像的像素绘制成 3d 模型。我可以看到所有背景噪音都是不同的灰色,并且几乎在某个区域内。我觉得这可以帮助我在代码中执行之前将它们过滤掉,但我不知道该怎么做。

如果您可以给我一些输入,我想寻求帮助,是否有一个功能并做得更快或一些代码并在我继续处理图像之前快速删除灰线?

示例图像在此处的链接中

0 投票
1 回答
467 浏览

python - 如何去除二进制图像中未连接到循环的白色像素

我有一个我已经二值化的图像,问题是我想删除该图像中未连接在循环中的白点,即小白点。原因是我想对该部分进行测量,如下所示

我尝试了一些 OpenCV 形态学函数,如腐蚀、打开、关闭,但结果不是我需要的。我也尝试过使用精明的边缘,但我想要进行一些处理的一些对角线也消失了。 是 thresh(left) 和 canny(right) 的结果

我已经读过修剪是一个我们删除未连接但我不知道它是如何工作的像素的过程?Opencv中是否有为此功能?

0 投票
0 回答
75 浏览

image-processing - 如何创建 ROI 并计算该 ROI 内的黑白像素?

我有以下黑白图像,其中 ROI(感兴趣区域)显示为绿色虚线,实线位于中心。我希望开发一些代码,通过将两条绿色实线之间的距离的 30% 添加到两条绿色实线的任一侧(如图中绿色虚线所示),可以自动绘制 ROI。然后,我希望在绿色虚线之间的两个区域内获得黑白像素的数量。谢谢

在此处输入图像描述 在此处 输入图像描述

在此处输入图像描述

0 投票
0 回答
1096 浏览

image-processing - 检测图像中的一张纸,如 cam-scanner 应用程序

从图像中,我需要提取一张纸,就像 camscanner 应用程序一样,https: //www.camscanner.com/

我知道我可以通过检测我想要检测的纸张的边缘来做到这一点。然后进行透视变换。我在 python 中使用 openCV 库。这是我试图在其中找到这张纸的图像:

一张纸来检测

这是我已经尝试过的:

方法1:(使用阈值)

  1. 使用图像平滑(高斯模糊/双边模糊)对图像进行预处理
  2. 将图像拆分为 h,s,v 通道
  3. 饱和通道上的自适应阈值
  4. 一些形态学操作,如膨胀和腐蚀
  5. 寻找轮廓,识别最大轮廓并找到角点

我已经根据 stackoverflow 答案实现了这个方法: 检测一张纸/正方形检测

我可以找到一些图像的纸张,但对于这样的图像它失败了:

纸张检测失败

方法2:(使用sobel梯度算子)

  1. 通过转换为灰度对图像进行预处理,图像平滑(高斯模糊/双边模糊)
  2. 寻找图像的梯度
  3. 对图像进行下采样和上采样
  4. 在此之后,我不知道如何找到包含图像的适当边界。

我已经根据 stackoverflow 答案实现了这种方法: 从背景中检测纸张几乎与纸张颜色相同

这是我对图像的了解程度:

索贝尔梯度结果

方法3:(使用canny边缘检测器)

根据我在这个社区上阅读的帖子,似乎每个人都更喜欢精明的边缘方法来提取边缘,但就我而言,结果并不令人满意。这是我所做的:

  1. 通过转换为灰度对图像进行预处理,图像平滑(高斯模糊/双边模糊)
  2. 使用精明的边缘寻找边缘
  3. 一些形态学操作,如膨胀和腐蚀
  4. 但是从canny那里得到的边缘确实不合格。

我已经根据 stackoverflow 的答案实现了这个方法: Detecting a sheet / Square Detection,我也没有通过在这个答案中迭代多个通道来完成他的工作。这是我对图像的了解程度:

精明的结果

这是method1(阈值)的一些代码:

我对图像处理和openCV有点陌生。请分享一些关于如何更进一步并更准确地获得结果的见解。TIA。

0 投票
1 回答
166 浏览

opencv - 如何在opencv中有条件地应用阈值

我有两种类型的图像要处理。一种具有白色背景,另一种具有深色背景。我的要求是为每种类型应用不同的阈值

例如:白色背景

用于深色背景

我正在使用阅读图像cv.imread(img,0)

我正在做形态变换,所以我需要反转白色背景图像。但对于深色背景,我不想反转。

0 投票
1 回答
374 浏览

python - 在python中将矩阵的值更改为高于阈值

我有一个矩阵:

我想将所有值替换0.55 < x < 0.950.55.

PS:我的问题与这个问题类似。但答案在我的情况下不起作用。