python - 如何在 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对不起我的英语语法错误。
解决方案
这不是一个程序化的解决方案,但是当您进行自动视觉检查时,您应该首先尝试:改进您的设置。图像的边缘更暗,因此在记录图像时增加亮度应该会有所帮助。
如果这不是一个选项,您可以考虑使用空图像进行比较。您正在尝试做的是背景分割,并且有比简单的颜色阈值更好的方法,但它们通常需要至少一张背景图像或多张图像。
如果您想要一个纯软件解决方案,您应该尝试结合形态算子的边缘检测器。
推荐阅读
- php - 为什么我收到 PHP Invalid JWT provided 错误?
- reactjs - 如何通过单击菜单按钮不更改地址。只交换屏幕上的一个组件?
- javascript - NodeJS 和 Retrofit 的多部分数据问题
- python - Python - 尝试除外
- azure - 您能否将应用服务日志或应用程序洞察日志摄取到 azure 事件中心
- c# - ObjectListView 在 SetObjects() 上抛出 InvalidCastException
- python - Teradataml:删除由 Teradata MLE 函数创建的所有临时表
- mysql - 如何确保单元测试原则正试图加载到与 dev 相同的数据库?
- azure - ACR 的 Azure 模块
- bash - 如何在bash中使用变量替换来回显字符串?