用OpenCV快速定位目标图片,你get了吗?
创作时间:
作者:
@小白创作中心
用OpenCV快速定位目标图片,你get了吗?
引用
CSDN
等
9
来源
1.
https://blog.csdn.net/youcans/article/details/121382552
2.
https://wenku.csdn.net/column/3een9waqfk
3.
https://blog.csdn.net/youcans/article/details/134487182
4.
https://blog.csdn.net/weixin_41869763/article/details/104426416
5.
https://woshicver.com/
6.
https://woshicver.com/SecondSection/1_1_OpenCV-Python%E6%95%99%E7%A8%8B%E7%AE%80%E4%BB%8B/
7.
https://woshicver.com/FirstSection/0_OpenCV-Python%20Tutorials/
8.
https://www.cnblogs.com/jsxyhelu/p/16947785.html
9.
https://www.cnblogs.com/luohenyueji/p/16970324.html
在计算机视觉领域,OpenCV(Open Source Computer Vision Library)是一个不可或缺的工具库,它提供了丰富的图像处理和计算机视觉算法,广泛应用于图像识别、目标检测、视频分析等场景。本文将重点介绍如何使用OpenCV进行目标图片的快速定位,特别是通过投影变换和模板匹配技术实现精准定位。
图像投影变换技术
投影变换(Projective mapping)也称为透视变换(Perspective transformation),它建立两个平面场之间的对应关系,将图片投影到一个新的视平面(Viewing plane)。OpenCV提供了cv2.warpPerspective函数来实现这一操作。
函数说明:
cv2.getPerspectiveTransform(src, dst[,solveMethod]) → MP
cv2.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
src:变换前图像四边形顶点坐标dst:变换后图像四边形顶点坐标solveMethod:矩阵分解方法,传递给cv2.solve求解变换矩阵MPMP:透视变换矩阵,3行3列dsize:输出图像的大小,二元元组(width, height)dst:变换操作的输出图像,可选项flags:插值方法,整型(int),可选项borderMode:边界像素方法,整型(int),可选项,默认值为cv2.BORDER_REFLECTborderValue:边界填充模式,可选项,默认值为0(黑色填充)
基本例程:
# 1.43 投影变换 (Projective mapping)
img = cv2.imread("../images/imgB2.jpg") # 读取彩色图像(BGR)
h, w = img.shape[:2] # 图片的高度和宽度
pointSrc = np.float32([[0,0], [w-1,0], [0,h-100], [w-1, h-100]]) # 原始图像中 4点坐标
pointDst = np.float32([[180,50], [w-180,50], [0,h-100], [w-1, h-100]]) # 变换图像中 4点坐标
MP = cv2.getPerspectiveTransform(pointSrc, pointDst) # 计算投影变换矩阵 M
imgP = cv2.warpPerspective(img, MP, (512, 512)) # 用变换矩阵 M 进行投影变换
plt.figure(figsize=(9,6))
plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title("Original")
plt.subplot(122), plt.imshow(cv2.cvtColor(imgP, cv2.COLOR_BGR2RGB)), plt.title("Projective")
plt.show()
模板匹配实战案例
模板匹配是一种在目标图像中查找与给定模板图像相似区域的技术。OpenCV提供了多种模板匹配算法,包括相关性系数匹配、平方差匹配等。
模板匹配函数:
cv2.matchTemplate(image, template, method)
image:目标图像template:模板图像method:模板匹配算法,可选值包括CV_TM_CCORR、CV_TM_SQDIFF、CV_TM_CCOEFF、CV_TM_SQDIFF_NORMED
实现步骤:
- 图像预处理:对模板图像和目标图像进行预处理,增强特征。常用的预处理方法包括灰度化、高斯滤波等。
- 模板匹配:使用
matchTemplate函数进行模板匹配,得到相似度图。 - 阈值处理:对相似度图进行阈值处理,过滤掉低相似度的匹配结果。
- 查找匹配点:使用
minMaxLoc函数查找相似度图中的最大值及其位置,即匹配点。 - 绘制匹配结果:在目标图像上绘制匹配点或匹配区域。
代码示例:
import cv2
import numpy as np
# 加载模板图像和目标图像
template = cv2.imread('template.jpg', cv2.IMREAD_GRAYSCALE)
target = cv2.imread('target.jpg', cv2.IMREAD_GRAYSCALE)
# 图像预处理
template = cv2.GaussianBlur(template, (5, 5), 0)
target = cv2.GaussianBlur(target, (5, 5), 0)
# 模板匹配
result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED)
# 阈值处理
threshold = 0.8
loc = np.where(result >= threshold)
# 绘制匹配结果
for pt in zip(*loc[::-1]):
cv2.rectangle(target, pt, (pt[0] + template.shape[1], pt[1] + template.shape[0]), (0, 255, 0), 2)
cv2.imshow('Result', target)
cv2.waitKey(0)
cv2.destroyAllWindows()
总结
OpenCV通过投影变换和模板匹配等技术,为图像处理和目标定位提供了强大的工具。这些技术不仅在OCR字符识别中发挥重要作用,还能在自动化测试中提升元素控件的定位速度和准确性。掌握这些技术,能够帮助开发者更高效地完成图像处理任务。
热门推荐
封阳台改造指南:提升安全舒适度,打造多功能空间,附详细报价
智能互联技术,让电热水器更安全便捷
低血糖真的很危险!你知道如何应对吗?
驻粤20年,中建四局以科技创新引领建筑业转型升级
补肝肾、乌发效果好,七宝美髯丸的科学配方与禁忌
老年人如何合法驾驶两轮摩托车?这里有份实用指南
中医调理气虚血虚:自测方法与三大调理方案全解析
黑豆超黄豆,7款食疗方案调理气血
看手知健康:冬季气虚血虚的中医调理指南
我国培育40余个粮食区域品牌,品牌建设进入快车道
316不锈钢:海鲜加工设备的首选材料
全国现行命案破案率达99.94%,不能只谈科技不看其他
《杀人回忆》中的凶手原型被抓,其实这个电影醉翁之意并不在凶手
大砗磲濒临灭绝,中华白海豚也危险了?
【王博士讲穴位】掌管生发的神,这几个穴位让你的秀发重获新生
复旦大学最新Nature研究:揭示养殖动物病毒多样性,为新发传染病预警提供新思路
老年人无证驾驶,真的没事?
谭咏麟陈百祥因足球队决裂,揭秘香港娱乐圈恩怨情仇
小分子肽:健康界的超级英雄
佛性概念的中国化:从“佛的性”到“平常心是道”
最新报告:佛系心态成年轻人心理健康新选择
当AI遇见佛教:2024国际峰会探讨意识与未来
《杀人回忆》中的凶手原型被抓,其实这个电影醉翁之意并不在凶手
年末王炸,这才是真正的中国刑警
西蓝花嘌呤含量仅为70mg/100g,痛风患者可放心食用
别迷信手机护眼模式,这些方法更有效保护视力
1989年属蛇命中劫难年解析,2024年蛇人大忌
锡伯族的农业智慧:察布查尔大渠与新疆丰收传奇
乌鲁木齐绿色出行:地铁公交加骑行,品茶赏景两不误
7.2公里装配式高架桥通车,乌鲁木齐打造国际交通枢纽迈出关键一步