用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_REFLECT
borderValue
:边界填充模式,可选项,默认值为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字符识别中发挥重要作用,还能在自动化测试中提升元素控件的定位速度和准确性。掌握这些技术,能够帮助开发者更高效地完成图像处理任务。
热门推荐
刺绣墙布材质:从传统到创新的多样化选择
实木大板桌厚度选择与定制要点解析
印尼拟将煤炭出口与HBA挂钩,或推高全球煤炭价格
Mysteel:印尼销售定价存在变量 中国进口动力煤市场继续承压
成都保障性租赁住房与廉租房申请条件及租金标准详解
中国国家博物馆13件镇馆之宝:从陶鹰鼎到单独陈列的玉龙
橱柜高度怎么算,打造舒适的家居空间
鸡蛋一天到底该吃几个?80%的人都吃错了!
双休日从哪年开始的?了解双休日的起源与发展
方大同离世,薛凯琪更换全平台封面图!曾经的喊话成永远的遗憾
一二三型胶原蛋白的区别介绍:从分布结构/美容功效/适用场景等方面对比下!
七杀独在时柱,“时上一位贵”的命格格局!
看完B站2024百大UP主,四个变化不得不提
定期胃肠镜检查有助于早癌的筛查,是健康体检的重要一环
别让旧手机“裸奔”!安全回收秘籍在此
红楼梦第十三回赏析:秦可卿之死与王熙凤掌权
广州地铁建设新进展:三条新线关键节点相继完成
虚拟机如何提高画质设置
唯一住房能否强制拍卖?评估不公平如何投诉?房屋拆迁上诉状怎么写?
鼻塞喉咙不舒服怎么办
个税申报税优识别码:定义、作用与申请指南
阿达帕林:战胜皮肤病的神奇药物!
解锁学习密码:高中生的时间管理与优先级设置
多元化直接融资渠道的构建与优化策略研究
量体温多久量一次
“破五”市民忙祈福,白云观里排队摸石猴
改善腺样体面容—-肌功能训练
酒仙诗魂——李白饮酒与诗歌创作的奇妙交织
C++中printf函数详解与格式化输出控制
业委会来了“小秘书”,一切在悄然改变!不信你看……