1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Martin-word-crawler_related

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
find_pic.py 4.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Martin Отправлено 03.01.2019 12:47 24f0c4a
from PIL import Image
import numpy as np
import random
class find_pic:
def __init__(self,img1,img2):
# 先将路径转为图片 后将图片转化为数组 图片名称【y坐标】【x坐标】【R、G、B】
self.img1 = Image.open(img1) # 图片1
self.img2 = Image.open(img2) # 图片2 需要寻找的图片
self.w, self.h = self.img1.size # 图片1 宽高
self.w2, self.h2 = self.img2.size # 图片2 宽高
self.x, self.y = 0, 0 # 图片2 在 图片1 的坐标
def pic_find_xy_RGB(self): # 查找图片上左上角的一点 小图推荐! 【百次寻图 平均时长 0.5.75S】 图片1【1920*1080】图片2【680*672】
img1, img2 = np.array(self.img1), np.array(self.img2) # 将图片转化为数组 y坐标 x坐标 RGB
a, b = random.randint(1, self.w2 - 1), random.randint(1, self.h2 - 1) # 生成一个随机坐标,用于二次判断
for x in range(0,self.w - self.w2): # 生成一个坐标
for y in range(0,self.h - self.h2):
if img1[y][x][0] == img2[0][0][0] and img1[y][x][1] == img2[0][0][1] and img1[y][x][2] == img2[0][0][2]: # 一次判断 取找图左上角坐标
if img1[y + b][x + a][0] == img2[b][a][0] and img1[y + b][x + a][1] == img2[b][a][1] and img1[y + b][x + a][2] == img2[b][a][2]: #二次判断
i, num = 0, 0
while True: # 进行 10 次位图随机选点对比,如果 全部匹配 则返回成功!
x2, y2 = random.randint(1, self.w2 - 1), random.randint(1, self.h2 - 1)
if img1[y + y2][x + x2][0] == img2[y2][x2][0] and img1[y + y2][x + x2][1] == img2[y2][x2][1] and img1[y + y2][x + x2][2] == img2[y2][x2][2]:
i += 1
num += 1
if num > 10:
break # 如果匹配失败重新进入循环
elif i >= 10:
self.x = x
self.y = y
return# 匹配成功返回数值
# 获取图片匹配的坐标 # 灰度搜索,实验功能! 大图推荐! 【百次寻图 平均时长 0.492S】
def pic_find_xy_Gray(self):
img1, img2 = np.array(self.img1.convert('L')), np.array(self.img2.convert('L')) # 将图片转化为数组 y坐标 x坐标
for x in range(0,self.w - self.w2): # 生成坐标
for y in range(0,self.h - self.h2):
if img1[y][x] == img2[0][0]: # 一次判断
# 二次判断,取 左上 右上 左下 右下 4个角落进行校准
if img1[y][x + self.w2 - 1] == img2[0][self.w2 - 1] and img1[y + self.h2 - 1][0] == img2[self.h2 - 1][0] and img1[y + self.h2 - 1][x + self.w2 - 1] == img2[self.h2 - 1][self.w2 - 1]:
i, num = 0, 0
while True: # 进行 10 次位图随机选点对比,如果 全部匹配 则返回成功!
x2, y2 = random.randint(1, self.w2 - 1), random.randint(1, self.h2 - 1)
if img1[y + y2][x + x2] == img2[y2][x2]:
i += 1
num += 1
if num > 10:
break # 如果匹配失败重新进入循环
elif i >= 10:
self.x = x
self.y = y
return# 匹配成功返回数值
# 获取该坐标匹配图片的百分比
def pic_percent(self, percent = 100):
# 如果上面没有搜索出 x, y 的坐标,则直接返回相似度 0%
if self.x == -1 and self.y == -1:
return 0
x, y, w, h = self.x, self.y, self.w2 ,self.h2
all = w * h * percent / 100
num = 0
img1, img2 = np.array(self.img1), np.array(self.img2)
for a in range(w):
for b in range(h):
if img1[b + y][a + x][0] == img2[b][a][0]: # 判断RGB是否相同
if img1[b + y][a + x][1] == img2[b][a][1] and img1[b + y][a + x][2] == img2[b][a][2]:
num = num + 1
if num > all:
return percent
return (round(num / all * 100, 2))

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Martin-word-crawler_related.git
git@api.gitlife.ru:oschina-mirror/Martin-word-crawler_related.git
oschina-mirror
Martin-word-crawler_related
Martin-word-crawler_related
master