1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| def get_thum(image, size=(128, 256), greyscale=False): image = image.resize(size, Image.ANTIALIAS) if greyscale: image = image.convert('L') return image
def cosSim(image1, image2): image1 = Image.fromarray(cv2.cvtColor(image1, cv2.COLOR_BGR2RGB)) image2 = Image.fromarray(cv2.cvtColor(image2, cv2.COLOR_BGR2RGB)) image1 = get_thum(image1) image2 = get_thum(image2) images = [image1, image2] vectors = [] norms = [] for image in images: vector = [] for pixel_turple in image.getdata(): vector.append(average(pixel_turple)) vectors.append(vector) norms.append(linalg.norm(vector, 2)) a, b = vectors a_norm, b_norm = norms res = dot(a / a_norm, b / b_norm) return res
def calculate(img, img1): H1 = cv2.calcHist([img], [1], None, [256], [0, 256]) H1 = cv2.normalize(H1, H1, 0, 1, cv2.NORM_MINMAX, -1) H2 = cv2.calcHist([img1], [1], None, [256], [0, 256]) H2 = cv2.normalize(H2, H2, 0, 1, cv2.NORM_MINMAX, -1) similarity = cv2.compareHist(H1, H2, 0) return (similarity) def make_regalur_image(img, size=(256, 256)): """我们有必要把所有的图片都统一到特别的规格,在这里我选择是的256x256的分辨率。""" return img.resize(size).convert('RGB') def hist_similar(lh, rh): assert len(lh) == len(rh) return sum(1 - (0 if l == r else float(abs(l - r)) / max(l, r)) for l, r in zip(lh, rh)) / len(lh) def calc_similar(li, ri): li = make_regalur_image(Image.fromarray(cv2.cvtColor(li, cv2.COLOR_BGR2RGB))) ri = make_regalur_image(Image.fromarray(cv2.cvtColor(ri, cv2.COLOR_BGR2RGB))) return sum(hist_similar(l.histogram(), r.histogram()) for l, r in zip(split_image(li), split_image(ri))) / 16.0 def split_image(img, part_size=(64, 64)): w, h = img.size pw, ph = part_size assert w % pw == h % ph == 0 return [img.crop((i, j, i + pw, j + ph)).copy() for i in range(0, w, pw) \ for j in range(0, h, ph)] def compareImg(temp, hwnd): img=capture(hwnd) temp = cv2.cvtColor(temp, cv2.COLOR_BGR2RGB) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) h, w = temp.shape[:2] res5 = cv2.matchTemplate(img, temp, cv2.TM_CCOEFF) minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(res5) r = img.copy() cv2.rectangle(r, maxLoc, (maxLoc[0] + w, maxLoc[1] + h), 255, 5) return r, (calc_similar(temp, img[maxLoc[1]:maxLoc[1] + h, maxLoc[0]:maxLoc[0] + w])), maxLoc class SetInfo: def __init__(self, slogan, saveName, hwnd): self.slogan = slogan; self.saveName = saveName; self.hwnd = hwnd;
def setting(self): print(self.slogan); img=capture(self.hwnd) roi = cv2.selectROI(img); print(roi); select = img[roi[1]:roi[1] + roi[3], roi[0]:roi[0] + roi[2]] cv2.imwrite(path + self.saveName, select); a, ra, _ = compareImg(select, self.hwnd) cv2.imshow('yb', a) print("相似度", ra) click(int((roi[0] + roi[0] + roi[2]) / 2), int((roi[1] + roi[1] + roi[3]) / 2), self.hwnd) cv2.waitKey(0); cv2.destroyAllWindows()
|