Существуют различные способы обрезки изображения, а также различные способы сопоставления шаблона с использованием 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
Принято Вывод: Принятовывод
вывод после разницы:
вывод
Спасибо.