2016-05-25 2 views
1

В python 2.7, я хочу сравнить 2 изображения с тем же, как это сделать? пожалуйста, покажите мне шаг за шагом. Благодаря!Python 2.7 - Как сравнить два изображения?

+1

Тонны и тонны учебников там: HTTP: // WWW. pyimagesearch.com/2014/09/15/python-compare-two-images/ http://stackoverflow.com/questions/1927660/compare-two-imag es-the-python-linux-way – PseudoAj

+1

Возможный дубликат [Как я могу определить разницу между двумя изображениями?] (http://stackoverflow.com/questions/189943/how-can-i-quantify-difference-between-two -изображений) –

ответ

1

Существует много способов сделать. Используя библиотеку с открытым исходным кодом, например OpenCV, Scikit Learn, TensorFlow.

Для сравнения двух изображений, вы можете сделать что-то вроде Template Matching в OpenCV

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 
img = cv2.imread('img.jpg', 0) 
img2 = img.copy() 
template = cv2.imread('img2.jpg', 0) 
w, h = template.shape[::-1] 
methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED'] 
for meth in methods: 
    img = img2.copy() 
    method = eval(meth) 

    res = cv2.matchTemplate(img, template, method) 
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) 

    if method in [cv2.TM_SQDIFF or cv2. TM_SQDIFF_NORMED]: 
     top_left = min_loc 
    else: 
     top_left = max_loc 

    bottom_right = (top_left[0] + w, top_left[1] + h) 

    cv2.rectangle(img, top_left, bottom_right, 255,2) 

    plt.subplot(121), plt.imshow(res) 
    plt.title('Matching Result'), plt.xticks([]), plt.yticks([]) 
    plt.subplot(122),plt.imshow(img,cmap = 'gray') 
    plt.title('Detected Point'), plt.xticks([]), plt.yticks([]) 
    plt.suptitle(meth) 
    plt.show() 

или Histogram comparison

import cv2 
import numpy as np 

base = cv2.imread('test4.jpg') 
test1 = cv2.imread('test3.jpg') 
test2 = cv2.imread('test5.jpg') 

rows,cols = base.shape[:2] 

basehsv = cv2.cvtColor(base,cv2.COLOR_BGR2HSV) 
test1hsv = cv2.cvtColor(test1,cv2.COLOR_BGR2HSV) 
test2hsv = cv2.cvtColor(test2,cv2.COLOR_BGR2HSV) 

halfhsv = basehsv[rows/2:rows-1,cols/2:cols-1].copy() # Take lower half of the base image for testing 

hbins = 180 
sbins = 255 
hrange = [0,180] 
srange = [0,256] 
ranges = hrange+srange # ranges = [0,180,0,256] 
ranges=None 


histbase = cv2.calcHist(basehsv,[0,1],None,[180,256],ranges) 
cv2.normalize(histbase,histbase,0,255,cv2.NORM_MINMAX) 

histhalf = cv2.calcHist(halfhsv,[0,1],None,[180,256],ranges) 
cv2.normalize(histhalf,histhalf,0,255,cv2.NORM_MINMAX) 

histtest1 = cv2.calcHist(test1hsv,[0,1],None,[180,256],ranges) 
cv2.normalize(histtest1,histtest1,0,255,cv2.NORM_MINMAX) 

histtest2 = cv2.calcHist(test2hsv,[0,1],None,[180,256],ranges) 
cv2.normalize(histtest2,histtest2,0,255,cv2.NORM_MINMAX) 

for i in xrange(5): 
    base_base = cv2.compareHist(histbase,histbase,i) 
    base_half = cv2.compareHist(histbase,histhalf,i) 
    base_test1 = cv2.compareHist(histbase,histtest1,i) 
    base_test2 = cv2.compareHist(histbase,histtest2,i) 
    print "Method: {0} -- base-base: {1} , base-test1: {2}, base_test2: {3}".format(i,base_base,base_test1,base_test2) 
Смежные вопросы