voxmax 发表于 2023-10-31 10:07

OpenCV简单的平面视觉定位坐标

最近无聊玩游戏自己写了个脚本,顺便简单研究了一下opencv的视觉处理,简单的灰度图二值化和模板匹配。有点小问题,如果有干扰的话定位框会飘。
目前想到的办法是用yolov8的分割模型去学习地图边界分割,但是暂时还没去做标注和训练。
import time
import cv2
import dxcam
import numpy as np

# 定义一个函数,用于显示帧数据
def main():
    last_center = (0, 0)
    cam = dxcam.create(output_idx=0, output_color="BGR")
    cam.start(region=(1625, 36, 1894, 267), target_fps=60, video_mode=True)
    while True:
      #读取big2图片
      big = cv2.imread('big2.jpg',0)
      big2 = big.copy()
      #
      #读取cam.get_latest_frame()获得的帧数据,并numpy化
      img = np.array(cam.get_latest_frame())
      #获得灰度图
      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
      #将灰度图二值化
      threshold_value, template = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)   
      
      #获得模版的宽高
      w, h = template.shape[::-1]
      #执行模版匹配,使用cv.TM_SQDIFF方法
      res = cv2.matchTemplate(big2,template,cv2.TM_SQDIFF)
      #获得匹配结果中的最小值、最大值、最小值坐标、最大值坐标
      min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
      #获得最小值坐标
      top_left = min_loc
      #获得最小值的右下角坐标
      bottom_right = (top_left + w, top_left + h)
      #获得矩形框中心点坐标
      center = (top_left + w/2, top_left + h/2)
      #随着移动,打印矩形框中心点坐标,如果中心坐标未改变数值,则不打印
      if center != last_center:
            print(center)
            last_center = center
      

      #在原图上画矩形
      cv2.rectangle(big,top_left, bottom_right, 255, 2)
      #调整窗口大小
      cv2.namedWindow('image', cv2.WINDOW_NORMAL)
      #调整窗口大小
      cv2.resizeWindow('image', 480, 584)
      #显示图像
      cv2.imshow('image',template)
      #按下q键退出
      if cv2.waitKey(1) & 0xFF == ord('q'):
            break
      #打印每帧的时间
    cam.stop()
    cv2.destroyAllWindows()
    # 释放资源
    cam.release()

# 创建一个 dxcam 实例,用于录屏
if __name__ == '__main__':
    main()

leo1688 发表于 2023-11-7 22:08

厉害啊,学习了,

lanpo5566 发表于 2023-11-16 18:08

学习学习,希望楼主多发些opencv教程

Master7 发表于 2023-11-29 16:12

学习视觉中,很有帮助

hehedahaha 发表于 2024-11-12 10:41

厉害,学习学习

huangdi956 发表于 2024-11-13 10:36

谢谢分享 来学习下

Wasys 发表于 2024-11-18 09:51

opencv值得好好学习
页: [1]
查看完整版本: OpenCV简单的平面视觉定位坐标