我试过你的代码,它只适用于第二个图像(9个框中的8个),因为你的框有白色标签,与背景形成了很好的对比。然而,它将不适用于第一个上传的图像。在
在第二张图片中,由于光照的变化,你的代码不能识别所有的盒子(这会导致阈值问题,因此只有8个盒子被检测到),所以我建议你读一读计算机视觉的灯光,因为它可以大大简化你的编码。也就是说,我已经对你的代码做了一个改动,也许能给你一个关于如何继续的想法(注释在代码中)…我已经用第二个图像测试了它,它确实识别了所有的框,但它仍然需要进一步测试。如果你想在你发布的这两种图片上检测盒子,那就需要一种不同的方法。在
代码:import cv2
# reading image
img = cv2.imread('boxes.jpg')
# thresholding the image
ret,thresh = cv2.threshold(img, 127, 229, cv2.THRESH_TOZERO)
edged = cv2.cvtColor(thresh, cv2.COLOR_BGR2GRAY)
# ADDED BINARY THRESHOLD
ret,thresh = cv2.threshold(edged,100,255,cv2.THRESH_BINARY)
# collectiong contours
_, contours,h = cv2.findContours(edged, cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('img', thresh)
# looping through