首页 > 解决方案 > 如何在 Python 中使用 OpenCV 将背景的阴影部分计为背景(下图)?

问题描述

我对 OpenCV(和 StackOverflow)非常陌生。我正在用 OpenCV 编写一个程序,它用一个对象(即笔(米,电话)放在纸上)拍照并计算对象对图片的百分比

我面临的问题是当我阈值图像(尝试自适应otsu)照片在边缘周围有点阴影时:

原始图像

结果图片

这是我的代码:

import cv2

img = cv2.imread("image.png")

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
b,g,r = cv2.split(img)

th, thresh = cv2.threshold(b, 100, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU)
cv2.imwrite("image_bl_wh.png", thresh)

试图模糊形态,但做不到。

如何让我的程序将图片周围的黑色部分视为背景,是否有更好更简单的方法来做到这一点?

PS对不起我的英语语法错误。

标签: pythonnumpyopencvmatplotlibcv2

解决方案


这不是一个程序化的解决方案,但是当您进行自动视觉检查时,您应该首先尝试:改进您的设置。图像的边缘更暗,因此在记录图像时增加亮度应该会有所帮助。

如果这不是一个选项,您可以考虑使用空图像进行比较。您正在尝试做的是背景分割,并且有比简单的颜色阈值更好的方法,但它们通常需要至少一张背景图像或多张图像。

如果您想要一个纯软件解决方案,您应该尝试结合形态算子的边缘检测器。


推荐阅读