文章目录
- 1. 模板匹配方法的定义
- 2. 标注软件labelme 标注以及数据解析裁剪模板
- 2.1 labelme简介
- 2.2 labelme标注的json文件解析
- 3. 基于Opencv python的模板构建与算法编写
- 4. 机场起飞飞机数据集与检测效果
- 5. 其他可用的一些图片
1. 模板匹配方法的定义
2. 标注软件labelme 标注以及数据解析裁剪模板 2.1 labelme简介
- 百度百科定义如下: 模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效。
- wikipedia定义如下: Template matching[1] is a technique in digital image processing for finding small parts of an image which match a template image. It can be used in manufacturing as a part of quality control,[2] a way to navigate a mobile robot,[3] or as a way to detect edges in images.[4] The main challenges in the template matching task are: occlusion, detection of non-rigid transformations, illumination and background changes, background clutter and scale changes.[5].
翻译一下就是:模板匹配是一种数字图像处理技术,这种技术用于寻找图像中的某一小块目标对象,寻找方法是匹配图像区域,找到与模板的相似性最大的区域。它可以应用在制造中用作质量控制的一部分,[2] 一种移动机器人的导航方式,[3] 或作为检测图像边缘的一种方式。 [4] 模板匹配任务的主要挑战是:遮挡、检测非刚性变换、光照和背景变化、背景杂波和尺度变化[5]。
labelme是图形图像注释工具,它是用Python编写的,并将Qt用于其图形界面。它是一个开源的、有界面可以交互的标注软件,但是它又是由命令行启动的,比软件的使用稍微麻烦点。它的功能很多,包括: 对图像进行多边形,矩形,圆形,多段线,线段,点形式的标注(可用于目标检-测,图像分割等任务)。对图像进行进行 flag 形式的标注(可用于图像分类 和 清理 任务)。 视频标注 - 生成 VOC 格式的数据集 - 生成 COCO 格式的数据集等。其界面如下图:
先尝试获取下框位置的对角线点坐标
import json path_head = r"C:UsersLIUDesktopcsdn任务模板匹配-机场飞机起飞" import os path = os.path.join(path_head, "IMG_20220807_085255.json") with open(path, "r") as f: row_data = json.load(f) print(row_data["shapes"][0]["points"])
结果
Out[8]: [[2380.0, 1148.0], [2690.0, 1323.0]]
确认区域正确后,进行裁剪
import cv2 img = cv2.imread("test.png") print(img.shape) # 飞机区域确认 img1 = img[1148:1323,2380:2690, :] cv2.imshow("img0", img1) cv2.waitkey(0)
截取成功,下面保存模板
cv2.imwrite('template_pic1.jpg', img1)3. 基于Opencv python的模板构建与算法编写
首先读取模板文件
import cv2 img = cv2.imread("test.png") templ = cv2.imread("template_pic1.jpg")
读取图像的尺寸,并通过opencv 函数 matchTemplate 对图像进行匹配
height, width, c = templ.shape results = cv2.matchTemplate(img, templ, cv2.TM_SQDIFF_NORMED) # 获取匹配结果中的最小值、最大值、最小值坐标和最大值坐标 minValue, maxValue, minLoc, maxLoc = cv2.minMaxLoc(results) resultPoint1 = minLoc resultPoint2 = (resultPoint1[0] + width, resultPoint1[1] + height)
画出矩形框,并显示与保存
cv2.rectangle(img, resultPoint1, resultPoint2, (0, 0, 255), 2) cv2.imshow("img", img) cv2.waitKey() cv2.destroyAllWindows()4. 机场起飞飞机数据集与检测效果
5. 其他可用的一些图片下面是识别效果
给出了一些在机场拍摄的其他图片,读者可以自行尝试,哈哈
链接:https://pan.baidu.com/s/1qdRKQoF8xCHUKPkRLCLumw
提取码:cwp8
–来自百度网盘超级会员V2的分享