问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

用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求解变换矩阵MP
  • MP:透视变换矩阵,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_CCORRCV_TM_SQDIFFCV_TM_CCOEFFCV_TM_SQDIFF_NORMED

实现步骤:

  1. 图像预处理:对模板图像和目标图像进行预处理,增强特征。常用的预处理方法包括灰度化、高斯滤波等。
  2. 模板匹配:使用matchTemplate函数进行模板匹配,得到相似度图。
  3. 阈值处理:对相似度图进行阈值处理,过滤掉低相似度的匹配结果。
  4. 查找匹配点:使用minMaxLoc函数查找相似度图中的最大值及其位置,即匹配点。
  5. 绘制匹配结果:在目标图像上绘制匹配点或匹配区域。

代码示例:

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字符识别中发挥重要作用,还能在自动化测试中提升元素控件的定位速度和准确性。掌握这些技术,能够帮助开发者更高效地完成图像处理任务。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号