如何在 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。抱歉我的英语语法错误。
这不是一个程序化的解决方案,但是当您进行自动视觉检查时,您应该首先尝试:改进您的设置。边缘,因此在记录图像时增加亮度应该会有所帮助。
如果这不是一个选项,您可以考虑使用空白图像进行比较。你要做的是背景分割,有比简单的颜色阈值更好的方法,但通常需要至少一张背景图像或多张图像。
如果您想要一个纯软件解决方案,您应该尝试结合形态学运算符的边缘检测器。
我是 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。抱歉我的英语语法错误。
这不是一个程序化的解决方案,但是当您进行自动视觉检查时,您应该首先尝试:改进您的设置。边缘,因此在记录图像时增加亮度应该会有所帮助。
如果这不是一个选项,您可以考虑使用空白图像进行比较。你要做的是背景分割,有比简单的颜色阈值更好的方法,但通常需要至少一张背景图像或多张图像。
如果您想要一个纯软件解决方案,您应该尝试结合形态学运算符的边缘检测器。