Распознавание прямоугольников opencv python
import cv2 as cv
import numpy as np
hsv_min = np.array((0, 54, 5), np.uint8)
hsv_max = np.array((187, 255, 253), np.uint8)
fn = 'resistor_crop.jpg' # имя файла, который будем анализировать
img = cv.imread(fn)
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) # меняем цветовую модель с BGR на HSV
thresh = cv.inRange(hsv, hsv_min, hsv_max) # применяем цветовой фильтр
_, contours0, hierarchy = cv.findContours(thresh.copy(), cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
# перебираем все найденные контуры в цикле
for cnt in contours0:
rect = cv.minAreaRect(cnt) # пытаемся вписать прямоугольник
box = cv.boxPoints(rect) # поиск четырех вершин прямоугольника
box = np.int0(box) # округление координат
cv.drawContours(img, [box], 0, (255, 0, 0), 2) # рисуем прямоугольник
cv.imshow('contours', img) # вывод обработанного кадра в окно
cv.waitKey()
cv.destroyAllWindows()
ERROR: Traceback (most recent call last): File "D:/My python project/findcolor/findline.py", line 14, in _, contours0, hierarchy = cv.findContours(thresh.copy(), cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) ValueError: not enough values to unpack (expected 3, got 2)
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
import cv2 as cv
import numpy as np
hsv_min = np.array((0, 54, 5), np.uint8)
hsv_max = np.array((187, 255, 253), np.uint8)
fn = 'Qt.png' # имя файла, который будем анализировать
img = cv.imread(fn)
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV) # меняем цветовую модель с BGR на HSV
thresh = cv.inRange(hsv, hsv_min, hsv_max) # применяем цветовой фильтр
# !!!
#_, contours0, hierarchy = cv.findContours(thresh.copy(), cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
(contours0, _) = cv.findContours(thresh.copy(), cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
# перебираем все найденные контуры в цикле
for cnt in contours0:
rect = cv.minAreaRect(cnt) # пытаемся вписать прямоугольник
box = cv.boxPoints(rect) # поиск четырех вершин прямоугольника
box = np.int0(box) # округление координат
cv.drawContours(img, [box], 0, (255, 0, 0), 2) # рисуем прямоугольник
cv.imshow('contours', img) # вывод обработанного кадра в окно
cv.waitKey()
cv.destroyAllWindows()
