上一篇 openCV 计算滑块缺口,执行可能出现问题,这一篇文章,是上一版本的补充(https://blog.csdn.net/weixin_42883164/article/details/137604965)
实现计算滑块缺口的步骤:
接口部分参照上述文章,重写detect_displacement 方法:
def detect_displacement(img_slider_path, image_background_path):"""detect displacement"""# # 参数0是灰度模式image = cv2.imread(img_slider_path, 0)# print("灰度模式")# show(image)image_cv2 = cv2.imread(img_slider_path)gray = cv2.cvtColor(image_cv2, cv2.COLOR_BGR2GRAY)# print("BGR模式")# show(gray)# 3. 二值化处理_, binary_image = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# print("二值化")# show(binary_image)# 4. 查找轮廓contours, hierarchy = cv2.findContours(binary_image, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 5. 在原图上绘制轮廓image_with_contours = cv2.drawContours(image, contours, -1, (0, 255, 0), 1) # 最后一个参数是轮廓线条的厚度# print("绘制轮廓")# show(image_with_contours)template = cv2.imread(image_background_path, 0)# show(template)#使用 matchTemplate 函数进行模板匹配res = cv2.matchTemplate(_tran_canny(image), _tran_canny(template), cv2.TM_CCOEFF_NORMED)# 最小值,最大值,并得到最小值, 最大值的索引min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)print(max_val)print(max_loc)# top_left = min_loc[0] # 横坐标# 展示圈出来的区域x, y = max_loc # 获取x,y位置坐标w, h = image.shape[::-1] # 宽高cv2.rectangle(template, (x, y), (x+w, y+h), (0, 0, 255), 2) #左上 右下 边框颜色,线条厚度show(template)top_left = x+wreturn top_left
实现效果: