Как я могу обработать рыночную листовку с Opencv, чтобы извлечь изображение продукта?Например, у меня есть листовка рынка:
Пример листовки рынка
Результат, который я ожидаю
Я пыталсяиспользовать некоторые методы обработки изображений, такие как двусторонние фильтры, adaptiveThreshold, findContours, но это не очень хорошо, потому что мне нужно изменить некоторые параметры, чтобы работать в других рыночных листовках.
Я думал об использовании ORB, SURF и / или FREAKи очистить изображение продукта для извлечения функций, а затем создать базу данных этих функций.
Пример моего алгоритма для извлечения изображений продуктов из листовок с рынка:
img = cv2.imread(image)
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.bilateralFilter(grayImage, 20, 21, 21)
threshold = cv2.adaptiveThreshold(blur, 250, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 249, 0)
_, contours, _ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
hullContours = []
for cnt in contours:
rect = cv2.minAreaRect(cnt)
box = cv2.boxPoints(rect)
hullContours.append(np.int0(box))
hullContours = [c for c in hullContours if 200 < cv2.contourArea(c) ]
for c in hullContours:
cv2.drawContours(img, [c], -1, (0, 0, 0), 2)
cv2.imshow("Image",img)
cv2.waitKey(0)
Пример ввода изображения
вывод результатов