1.思路
复制原先图片匹配一般都是缺口匹配全图
优化点:
1.缺口图片匹配缺口所在图片那一行图片可以提高他识别率
2.移动后再进行2次匹配计算距离
2.代码
复制
def get_image_deviation():
block = cv.imread("img.png", -1)
backimg = cv.imread("bg_img.png")
gray_backimg = cv.cvtColor(backimg, cv.COLOR_RGB2GRAY)
blockWidth, blockHeight = block.shape[1], block.shape[0]
left = blockWidth
right = 0
top = blockHeight
bottom = 0
for i in range(0, blockHeight):
for j in range(0, blockWidth):
if block[i, j, 3] > 0:
if j <= left:
left = j
if j >= right:
right = j
if i <= top:
top = i
if i >= bottom:
bottom = i
blockBox = block[top:bottom, left:right]
blockBox_width, blockBox_height = blockBox.shape[1], blockBox.shape[0]
print(blockBox_width)
blockMask = np.zeros([blockBox_height, blockBox_width], np.uint8)
for i in range(0, blockBox_height):
for j in range(0, blockBox_width):
if blockBox[i, j, 3] > 0:
blockMask[i, j] = 255
blockBox = cv.cvtColor(blockBox, cv.COLOR_RGBA2GRAY)
kernel = np.ones((3, 3), np.uint8)
blockMask = cv.erode(blockMask, kernel, iterations=1).astype(np.float32)
backgroundROI = gray_backimg[top:bottom, :]
blockBox = (blockBox * 1.0).astype(np.float32)
backgroundROI = (backgroundROI * 1.0).astype(np.float32)
res = cv.matchTemplate(backgroundROI, blockBox, cv.TM_CCORR_NORMED, mask=blockMask)
loc = cv.minMaxLoc(res)
print("loc==", loc[3][0])
locs = (loc[3][0])
return locs
driver.find_elements_by_xpath('//*[@class="yidun_bg-img"]')[1].screenshot('0.png')
bg_act = cv.imread('0.png')
bg_act_height, bg_act_width = bg_act.shape[0],bg_act.shape[1]
bg = cv.imread('bg_img.png')
bg_height, bg_width = bg.shape[0],bg.shape[1]
block = cv.imread('img.png', -1)
scale = bg_act_height * 1.0 / bg_height
scale1 = bg_act_width * 1.0 / bg_width
block_act = cv.resize(block, (0,0), fx = scale, fy=scale)
print('scale: ', scale, scale1)
x1,x2 =get_image_deviation(bg, block)
x1 = int(x1*scale)
print("x1x2=", x1, x2)
ActionChains(滑块元素).move_by_offset(xoffset= 移动上面生成的距离, yoffset=0).perform()
driver.find_elements_by_xpath('//*[@class="yidun_bg-img"]')[1].screenshot('bg1.png')
bg_act1 = cv.imread('bg1.png')
x3,x4=get_image_deviation(bg_act1, block_act)
print("x3x4=", x3, x4)
time.sleep(5)
ActionChains(driver).move_by_offset(xoffset= x1-x3, yoffset=0).perform()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2019-05-28 文件的详细操作
2019-05-28 力扣题目汇总(单调数列,两个数组的交集Ⅱ,学生出勤记录Ⅰ)