12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- # encoding: utf-8
- '''
- 用于两张图片比对检测
- '''
- import cv2 as cv
- import numpy as np
- import random
- # from matplotlib import pyplot as plt
- GRAY_LEVEL = 255
- class DoubleImage():
- def __init__(self):
- pass
- #裁剪图片
- def cutImage(self, img_addr):
- img = cv.imread(img_addr)
- img_arr = np.array(img)
- hight = img_arr.shape[0]
- wight = img_arr.shape[1]
- dest_img = img_arr[hight-280:hight-180,wight-280:wight-180]
- return dest_img
- '''
- 比较两张图片,如果根据threshold设定的容错值,有1%的点超过范围,则图片不一致。
- :param picPath1:第一个参数为为标准图地址,
- :param picPath2:第二个参数为测试图地址
- :param threshold: RGB颜色偏差容错范围
- '''
- def cmpPicTotal(self, picPath1, picPath2, threshold=20, expDotRate=0.01):
- srcImg1 = cv.imread(picPath1)
- srcImg2 = cv.imread(picPath2)
- return self.cmpImgTotal(srcImg1, srcImg2, threshold, expDotRate)
- '''
- 比较两张图片,如果根据threshold设定的容错值,有1%的点超过范围,则图片不一致。
- :param picPath1:第一个参数为为标准图对象,
- :param picPath2:第二个参数为测试图对象
- :param threshold: RGB颜色偏差容错范围
- '''
- def cmpImgTotal(self, srcImg1, srcImg2, threshold=20, expDotRate=0.01):
- shape = srcImg2.shape
- dstImg = srcImg1 - srcImg2
- cv.imwrite("D:/dstImg.png", dstImg)
- bArr = dstImg[:,:,0].ravel()
- gArr = dstImg[:,:,1].ravel()
- rArr = dstImg[:,:,2].ravel()
- dotSum = shape[0]*shape[1]+0.0
- bCount = np.where((bArr>threshold)&(bArr<=255))[0].__len__()
- gCount = np.where((gArr>threshold)&(gArr<=255))[0].__len__()
- rCount = np.where((rArr>threshold)&(rArr<=255))[0].__len__()
- print "cmpImgTotal BGR点异常个数比例:", bCount/dotSum,gCount/dotSum,rCount/dotSum
- if bCount/dotSum>expDotRate or gCount/dotSum > expDotRate or rCount/dotSum>expDotRate:
- return False
- else:
- return True
- '''
- 缺少衡量等级数字量化
- '''
- def cmpORB(self, im1, im2):
- orb = cv.ORB_create()
- kp = orb.detect(im1, None)
- kp, des1 = orb.compute(im1,kp)
- print "des1:",des1.__len__()
- # draw only keypoints location,not size and orientation
- # img1 = cv.drawKeypoints(im1, kp, None, color=(0, 255, 0), flags=0)
- # plt.imshow(img1), plt.show()
- orb = cv.ORB_create()
- kp2 = orb.detect(im2, None)
- kp2, des2 = orb.compute(im2, kp2)
- print "des2:",des2.__len__()
- # draw only keypoints location,not size and orientation
- # img2 = cv.drawKeypoints(im2, kp, None, color=(0, 255, 0), flags=0)
- # plt.imshow(img2), plt.show()
- if __name__ == '__main__':
- dImg = DoubleImage()
- # dImg.cmpPicTotal('flower.jpg', 'flower.jpg')
- im1 = cv.imread('std.jpg')
- im2 = cv.imread('test.jpg')
- # psnr = dImg.psnr(im1, im2)
- # print "im1,im2 psnr:", psnr
- # dImg.cmpHist(im1 , im2)
- dImg.cmpORB(im1,im2)
|