使用OpenCV-python

时间:2016-05-26 05:01:35

标签: python-2.7 opencv image-processing

我必须比较在不同周围光线下拍摄的同一物体的两个图像(例如一个在明亮的阳光下,另一个在白光下等),并且相机角度旋转以及尺寸可能不同。现在由于图像是同一个对象,它们应该几乎正确匹配。比较将根据颜色和形状进行。为此,需要重新调整测试图像,旋转并且应该补偿光的差异。请告诉我如何使用OpenCV-python来完成它。我正在使用OpenCV 3.0.0和python 2.7 我附上了要比较的同一物体的样本图像。

Image 1

Image 2

我真的没有得到任何好的方法来完成这项工作。请帮帮我 提前谢谢!

2 个答案:

答案 0 :(得分:0)

尝试使用兴趣点检测器(如ORB或SIFT)匹配图像。以下是使用ORB的结果。

enter image description here

代码

import numpy as np
import cv2
from matplotlib import pyplot as plt

img1 = cv2.imread('im1.jpg',0) 
img2 = cv2.imread('im2.jpg',0) 

orb = cv2.ORB_create()

kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)

bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)

good = []
for m,n in matches:
    if m.distance < 0.95*n.distance:
        good.append([m])

img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good, None,flags=2)


plt.imshow(img3),plt.show()

答案 1 :(得分:0)

在评论之后,如果对象没有像本例中那样的明显特征,我建议使用几何特征:

  • 删除背景(仅使用对象与背景创建二进制图像)
  • 找到外轮廓
  • 查找其方向,大小,中心
  • 旋转和缩放图像
  • 如果你有一些投影(图像不是直接从上面拍摄),你可以使用一些算法进行形状匹配,找到点之间的对应关系,然后从中估计单应性。

然后,当您的图像对齐时,您可以使用任何相关性进行比较。请查看本教程Histogram Comparison