| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | # encoding: utf-8'''用于两张图片比对检测'''import cv2 as cvimport numpy as npimport random# from matplotlib import pyplot as pltGRAY_LEVEL = 255class 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)
 |