优化第一种滑块方法,使其结果更加精确
import uuid
import os
import cv2
import numpy as np
def get_distance_1(background,slider,tmp_save=False):
"""
:param background: 背景图
:param slider: 缺口图
:param tmp_save: 是否保存临时文件
:return: x坐标
"""
# 读取进行色度图片,转换为numpy中的数组类型数据,
slider_pic = cv2.imread(slider, 0)
background_pic = cv2.imread(background, 0)
# 获取缺口图数组的形状 -->缺口图的宽和高
width, height = slider_pic.shape[::-1]
# 将处理之后的图片另存
tmp = uuid.uuid4()
tmp_slider =f"{tmp}_slider.jpg"
tmp_background = f"{tmp}_background01.jpg"
cv2.imwrite(tmp_background, background_pic)
cv2.imwrite(tmp_slider, slider_pic)
# 读取另存的滑块图
slider_pic = cv2.imread(tmp_slider)
# 进行色彩转换
slider_pic = cv2.cvtColor(slider_pic, cv2.COLOR_BGR2GRAY)
# 获取色差的绝对值
slider_pic = abs(255 - slider_pic)
# 保存图片
cv2.imwrite(tmp_slider, slider_pic)
# 读取滑块
slider_pic = cv2.imread(tmp_slider)
# 读取背景图
background_pic = cv2.imread(tmp_background)
# 比较两张图的重叠区域
result = cv2.matchTemplate(slider_pic, background_pic, cv2.TM_CCOEFF_NORMED)
# 获取图片的缺口位置
top, left = np.unravel_index(result.argmax(), result.shape)
# 删除临时文件
if not tmp_save:
os.remove(tmp_slider)
os.remove(tmp_background)
# 背景图中的图片缺口坐标位置
print("当前滑块的缺口位置:", (left, top, left + width, top + height))
return left
if __name__ == '__main__':
d=get_distance_1("1.png","2.png")
print(d)