Opencv图像处理

为什么我这串代码检测不出每个窗口的数量,都是显示为0的,有人能帮我看看怎么改吗
import cv2
import numpy as np

def detect_item_quantity(image):
# 将图像转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 对灰度图进行二值化处理
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)

# 寻找轮廓
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 遍历轮廓,计算每个货窗中物品的数量
item_quantities = []
for contour in contours:
    # 计算轮廓的面积
    area = cv2.contourArea(contour)

    # 假设物品的面积范围
    if area > 200 and area < 800:
        item_quantities.append(1)
    elif area >= 800:
        item_quantities.append(2)
    else:
        item_quantities.append(0)

return item_quantities

读取货架图像

image = cv2.imread(r'E:\zuoye\3.jpg')

调用函数检测每个货窗中物品的数量

quantities = detect_item_quantity(image)

在图像上标注物品的数量

for i, quantity in enumerate(quantities):
x = i * 100 + 20
y = 50
cv2.putText(image, str(quantity), (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)

显示结果图像

cv2.imshow('Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

img


img

img


后面是想要实现的效果

python调试三板斧 https://ask.csdn.net/questions/7908322/54130133

你的binary图不是你以为的样子 保存下来,看是否根本无法用你现在写的这个面积阈值去判断

你把运行日志打印出来发给我

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/681284
  • 这篇博客你也可以参考下:opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像头并实时不断截屏,读取视频并截图)
  • 除此之外, 这篇博客: 基于OpenCV的条形码区域检测(三)中的 中的测试结果可以得知,基于形态学的条形码区域检测是十分不可靠的。所以就考虑到了不使用形态学的方法,改为利用条形码的方向信息 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    源图像
    梯度强度图像

  • 您还可以看一下 AI100讲师老师的计算机视觉实战:如何使用OpenCV构建视觉应用课程中的 计算机视觉实战:如何使用OpenCV快速构建视觉应用小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    问题描述:

    我正在使用Opencv进行图像处理,并尝试检测每个窗口中物品的数量。然而,我的代码无法正确检测数量,每个窗口都显示为0。我希望您能帮助我查找问题所在并提供一些优化建议。

    以下是我的代码实现步骤:

    1. 读取货架图像
    2. 通过调用函数进行物品检测
    3. 在图像上标注检测出的物品数量
    4. 显示结果图像

    我希望您能够为我的代码提供一些优化建议,以确保能够正确检测每个窗口中物品的数量。感谢您的帮助!

    提示:

    您可以尝试在调用物品检测函数前调整图像的亮度和对比度,以提高图像质量。同时,您还可以在调用检测函数之前对图像进行预处理,例如进行边缘检测或滤波。此外,您需要检查您的检测函数是否正确并且返回正确的数量。最后,在标注物品数量时,建议使用绿色或红色框标记物品,并在每个框上方显示数字。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^