Как сделать сопоставление двух шаблонов для двух изображений с максимальным сходством? - PullRequest
0 голосов
/ 09 мая 2019

Существуют различные способы обрезки изображения, а также различные способы сопоставления шаблона с использованием opencv.

Но есть ли способ использовать это вместе, чтобы получить изображение с максимальным сходством?так, чтобы два изображения были на коленях с минимальной разницей.

код для создания шаблона:

from PIL import Image
import numpy as np
import cv2

path = './Image_1.png'
org = cv2.imread(path)
img = cv2.imread(path)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret,thresh = cv2.threshold(gray,127,255,1)

contours,h = cv2.findContours(thresh,1,2)

for cnt in contours:
    approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
    
    # print (len(approx))
    if len(approx)==5:
        # print "pentagon"
        cv2.drawContours(img,[cnt],0,255,-1)
    elif len(approx)==3:
        # print "triangle"
        cv2.drawContours(img,[cnt],0,(0,255,0),-1)
    elif len(approx)==4:
        # print "square"
        cv2.drawContours(img,[cnt],0,(0,0,255),-1)
    elif len(approx) == 9:
        # print "half-circle"
        cv2.drawContours(img,[cnt],0,(255,255,0),-1)
    elif len(approx) > 15:
        # print "circle"
        cv2.drawContours(img,[cnt],0,(0,255,255),-1)

    x,y,w,h = cv2.boundingRect(cnt)
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
    roi_1 = org[y:y+h, x:x+w]                                                                        # crop image
    # dst = cv2.create(roi.size(), CV_8UC3)

print (roi_1.shape)

cv2.imwrite('./test/Image_crop.jpg', roi_1)                                                          # color org. image
# cv2.imshow('img',roi)
# cv2.imshow('img_1',img)
# cv2.waitKey(0)
cv2.imshow('img_2',roi_1)
cv2.waitKey(0)

после создания двух шаблонов:

код для шаблона Соответствие:

    import numpy as np
    import cv2
     
    image = cv2.imread('./Image_1.png')
    template = cv2.imread('./Image_2.jpg')
     
    # resize images
    image = cv2.resize(image, (0,0), fx=0.5, fy=0.5)
    template = cv2.resize(template, (0,0), fx=0.5, fy=0.5)
     
    # Convert to grayscale
    imageGray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    templateGray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
     
    # Find template
    result = cv2.matchTemplate(imageGray,templateGray, cv2.TM_CCOEFF)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    top_left = max_loc
    h,w = templateGray.shape
    bottom_right = (top_left[0] + w, top_left[1] + h)
    cv2.rectangle(image,top_left, bottom_right,(0,0,255),1)
     
    # Show result
    cv2.imshow("Template", template)
    cv2.waitKey(0)
    cv2.imshow("Result", image)
    cv2.waitKey(0)

это код для создания шаблона и последующего его сопоставления, но что если мы хотим создать два одинаковых шаблона с 99% совпадения одного и того же объекта, полученного с помощью камеры.

какое-либо решение сделать шаблон для двух изображений одного и того же объекта с максимальным сходством?

В других работах я хочу сделать шаблон, идентичный друг другу, который такжето же самое ??

Изображение 1: Изображение 1

Изображение 2: Изображение 2

Принято Вывод: Принятовывод

вывод после разницы:

вывод

Спасибо.

...