用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字符识别中发挥重要作用,还能在自动化测试中提升元素控件的定位速度和准确性。掌握这些技术,能够帮助开发者更高效地完成图像处理任务。
热门推荐
直播行业如何提升你的职场竞争力?
海南环岛游,哪种方式最适合你?
海南环岛自驾游:冬日避寒的最佳选择!
海南环岛游必打卡水上项目大集合!
探索能源数字化转型新发展,2024国际数字能源展主论坛深刻剖析
宝宝补钙和补锌的正确间隔时间,家长必看!
感冒了也要笑一笑,加速康复有妙招!
冬季防疫新宠:八段锦助你提升免疫力
辽宁中医大专家推荐:秋冬季节学生如何科学预防感冒
喝鸡汤治感冒,医生都点赞!
热水泡脚能预防感冒吗?这样做才有效!
揭秘漳州古城:这座城市的灵魂地标,你了解多少?
ChatGPT:人机情感交流新维度
《流浪地球3》票房破纪录,郭帆如何做到?
即时零售成连锁药房新宠,O2O业务占比近八成
隐私权受侵犯?教你用法律武器守护手机隐私!
国家安全部提醒:手机隐私泄露风险知多少?
捷达CD机故障?这些小妙招让你秒变修车达人!
中国广电联手华为完成全球首个700MHz 5G系统验证,5G商用加速推进
疫情重塑零售业:人才需求大变局与未来趋势展望
红烧鸭块的多种做法详细介绍
仔姜烧鸭的做法:香辣开胃,美味下饭
红烧鸭子怎么做肉质更加鲜嫩可口
鸭子烹饪全攻略:从选材到搭配的艺术
天津冬季打卡:古文化街&天后宫必游!
冬日浪漫:天津意式风情区打卡攻略
安史之乱:安禄山与史思明如何摧毁长安?
唐末战乱:长安城的没落探秘
《长安十二时辰》揭秘:安史之乱后的吐蕃威胁与长安衰落
安史之乱后,长安为何一蹶不振?