如何在 Python 中使用 OpenCV 将背景的阴影部分算作背景(下图)?

How to make shadowed part of background count as background (picture below) with OpenCV in Python?

我是 OpenCV(和 Whosebug)的新手。我正在用 OpenCV 编写一个程序,它用一个物体(即笔(米,phone)放在纸上)拍照并计算物体占图片的百分比.

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

Original image

Resulted picture

这是我的代码:

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)

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

我怎样才能让我的程序把图片周围的黑色部分算作背景,还有更好更简单的方法吗?

P.S。抱歉我的英语语法错误。

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

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

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