Предоставляем некоторый контекст: я пытаюсь получить количество ящиков на этом изображении, введите описание изображения здесь
У меня есть приведенное выше изображение, сохраненное в ndarray blank_img.
Если я запустил следующее:
v = np.median(blank_img)
sigma = 0.33
lower = int(max(0, (1.0 - sigma) * v))
upper = int(min(255, (1.0 + sigma) * v))
edges = cv2.Canny(blank_img, lower, upper, 3)
edges = cv2.dilate(edges, np.ones((2, 2), dtype=np.uint8))
cnts= cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
len (cnts) равно 1. Но если я сохраню массив blank_img перед обнаружением хитрых краев и findContours, как показано ниже:
cv2.imwrite('boxes.jpg', blank_img)
blank_img = cv2.imread('boxes.jpg')
Теперь, когда я запускаю свой фрагмент кода findContour, len (cnts)> 1. Я хотел бы знать как исправить это, чтобы мне не требовалось накладных расходов на сохранение изображений.
~~ EDIT ~~ Найдите следующий код, который я использовал для создания blank_img
blank_img = 255*np.zeros((height, width, 3), np.uint8)
for line in lines:
x1, y1, x2, y2 = line
cv2.line(blank_img,(x1,y1),(x2,y2),(255,255,255),1)
Где lines
- это список строк, возвращаемых HoughLinesP:
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 100, None,minlinelength,maxlinegap)