Как я могу использовать OpenCV, чтобы получить изображения продуктов из листовки рынка? - PullRequest
0 голосов
/ 27 февраля 2019

Как я могу обработать рыночную листовку с 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)

Пример ввода изображения

вывод результатов

...