@maryaTurova

Как определить координаты картинки у которой нет дубликатов, либо с наименьшими повторениями?

Примеры картинок

1 картинка. (Здесь координаты 1 или 3 картинки)
64e5230b6f5ef026776179.png
2 картинка. (Здесь координаты 4 картинки)
64e52317d953b566002521.png
3 картинка.(Здесь координаты 5 картинки)
64e523210c25e037345333.png

Каждую обрезаю по контуру:
Пример
img = cv2.imread('test.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(img, 225, 255, cv2.THRESH_BINARY_INV)
kernal = np.ones((3, 3), np.uint8)
dilation = cv2.dilate(thresh, kernal, iterations=2)
contours, hierarchy = cv2.findContours(
    dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(contours, key=cv2.contourArea, reverse=True)

for c in cnts:
    x, y, w, h = cv2.boundingRect(c)
    box_img = img[y:y+h, x:x+w]

Решил попробовать по подсчету пикселей, но для одинаковых картинок и под разным наклонам они отличаются.
Так же собирал все пиксели в список и искал по самой большой разнице, но этот вариант тоже далек от 100%.
Есть мысли?
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 2
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Смотрите в сторону хеширующих функций, например реализация phash Вас спасет - https://en.m.wikipedia.org/wiki/Perceptual_hashing
Ну и книжку порекомендую "цифровая обработка изображений" Гонсалес и Вудс.
Ответ написан
@U235U235
Как вариант, считать статистические характеристики картинок, типа моментов (среднее, дисперсия и т.д.), гистограммы, независимые от поворота. А далее кластеризовать вектора признаков, точнее находить выброс.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы