Python应用案例之利用opencv实现图像匹配
作者:翻车吧奥斯卡
OpenCV 是一个的跨平台计算机视觉库,可以运行在 Linux、Windows 和 Mac OS 操作系统上,这篇文章主要给大家介绍了关于Python应用案例之利用opencv实现图像匹配的相关资料,需要的朋友可以参考下
1.创作需求
我们通常需要从一幅图中找到自己想要的信息,例如从一堆表情中找到,自己需要的表情。
2.创作思路
1.使用模板图片作为卷积核与原图进行卷积运算,得出匹配度超过某一阈值的范围。
2.对该部分进行框选
3.工具
主要使用opencv库实现,通过
cv2.matchTemplate()函数进行实现。
4.代码实现
import cv2 import matplotlib.pyplot as plt # 读取图像 # 路径不可以有汉字 original_image = cv2.imread('picture.png') # 转化为灰度图方便计算 gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY) # 显示原图 plt.figure(figsize=(20, 20)) plt.imshow(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB)) # 转换颜色空间以匹配matplotlib plt.title('Original Image') plt.axis('off') plt.show() # 显示灰度图 plt.figure(figsize=(20, 20)) plt.imshow(gray_image, cmap='gray') plt.title('Grayscale Image') plt.axis('off') plt.show() # 加载模板 # 想要从原图中找到的部分 # 这里截取原图中一个表情 template = gray_image[90:180, 100:180] # 模板匹配 # 将选取表情与原图匹配 result = cv2.matchTemplate(gray_image, template, cv2.TM_CCOEFF_NORMED) # 找到匹配得分最高的区域 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) # 绘制矩形框 threshold = 0.9999 # 根据需要调整阈值 if max_val >= threshold: # 计算矩形框的左上角和右下角坐标 top_left = max_loc bottom_right = (top_left[0] + template.shape[1], top_left[1] + template.shape[0]) # 在原图上绘制矩形框 cv2.rectangle(original_image, top_left, bottom_right, (0, 0, 255), 2) # 显示结果 plt.figure(figsize=(20, 20)) plt.imshow(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB)) # 转换颜色空间以匹配matplotlib plt.title('Matched Template') plt.axis('off') plt.show()
5.补充说明
对于阈值的选择需要自己进行尝试,已找到最优解。这个代码只找了一个,伙伴们可以自己实现,找到图中所有的模板图
到此这篇关于Python应用案例之利用opencv实现图像匹配的文章就介绍到这了,更多相关Python opencv图像匹配内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!