精易论坛

标题: python(opencv) 一个函数实现hk识别 [打印本页]

作者: lingdon    时间: 2024-10-1 09:36
标题: python(opencv) 一个函数实现hk识别
本帖最后由 lingdon 于 2024-10-1 09:45 编辑


[Python] 纯文本查看 复制代码
import numpy as np
import cv2
import base64
from io import BytesIO
    def 识别缺口(self, bg, tp):
        '''
        bg: 背景图片{B64格式}
        tp: 缺口图片{B64格式}
        out:输出坐标{int格式}
        '''
        # 将 BytesIO 对象转换为 numpy 数组
        bg_arr = np.frombuffer(BytesIO(base64.b64decode(bg.read())), np.uint8)
        tp_arr = np.frombuffer(BytesIO(base64.b64decode(tp.read())), np.uint8)

        # 读取背景图片和缺口图片
        bg_img = cv2.imdecode(bg_arr, cv2.IMREAD_COLOR)  # 背景图片
        tp_img = cv2.imdecode(tp_arr, cv2.IMREAD_COLOR)  # 缺口图片

        bg_edge = cv2.Canny(bg_img, 300, 100)
        tp_edge = cv2.Canny(tp_img, 1200, 1000)

        # 转换图片格式
        bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
        tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)

        # 缺口匹配
        res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 寻找最优匹配

        # 绘制方框
        th, tw = tp_pic.shape[:2]
        tl = max_loc  # 左上角点的坐标
        br = (tl[0] + tw, tl[1] + th)  # 右下角点的坐标
        cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2)  # 绘制矩形
        # # 查看图片
        # cv2.imshow("1", tp_pic)
        # cv2.waitKey(0)
        # 返回缺口的X坐标
        return tl[0]



可以微调边缘的参数bg_edge = cv2.Canny(bg_img, 300, 100)
tp_edge = cv2.Canny(tp_img, 1200, 1000)

还有升级版和轨迹我觉得效果差不太多就不放出来了










作者: menghu780409    时间: 2024-10-6 08:22
谢谢分享
作者: pshq123    时间: 2024-10-6 09:09

作者: lcylcyll    时间: 2024-10-9 15:43
谢谢分享




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4