opencv 利用cv.matchShapes()函数实现图像识别技术

Posted wojianxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv 利用cv.matchShapes()函数实现图像识别技术相关的知识,希望对你有一定的参考价值。

在待识别图像上找到模板图像

待识别图像:
技术图片
模板图像:
技术图片

识别原理

1. 将待识别图像 -> 灰度图像 -> 二值图像
2. 通过轮廓检索函数 cv.findContours 找到待识别图像所有轮廓
3. 模板图像 -> 灰度图像 -> 二值图像
4. 通过轮廓检索函数 cv.findContours 找到模板图像中字母 A 的外轮廓
5. 将第2步得到的轮廓逐一和第4步得到的轮廓 通过 cv.matchShapes 函数进行形状匹配。找到其中最小值,最小值对应的待识别图像中的轮廓即为匹配到的模板图像
6. 标出在待识别图像中找到的模板图像

实验:图像匹配

import cv2 as cv
import numpy as np

# 载入原图
img = cv.imread(‘abc.jpg‘, 0)
# 在下面这张图像上作画
image1 = cv.cvtColor(img,cv.COLOR_GRAY2BGR)

# 二值化图像
_, thresh = cv.threshold(img, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
# 搜索轮廓
contours, hierarchy = cv.findContours(thresh, 3, 2)
hierarchy = np.squeeze(hierarchy)

# 载入标准模板图
img_a = cv.imread(‘template_a.jpg‘, 0)
_, th = cv.threshold(img_a, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
contours1, hierarchy1 = cv.findContours(th, 3, 2)
# 字母A的轮廓
template_a = contours1[0]

# 记录最匹配的值的大小和位置
min_pos = -1
min_value = 2
for i in range(len(contours)):
	# 参数3:匹配方法;参数4:opencv预留参数
	value = cv.matchShapes(template_a,contours[i],1,0.0)
	if value < min_value:
		min_value = value
		min_pos = i

# 参数3为0表示绘制本条轮廓contours[min_pos]
cv.drawContours(image1,[contours[min_pos]],0,[255,0,0],3)

cv.imshow(‘result‘,image1)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果

技术图片

以上是关于opencv 利用cv.matchShapes()函数实现图像识别技术的主要内容,如果未能解决你的问题,请参考以下文章

youcans 的 OpenCV 例程200篇198.基于不变矩的形状相似性检测

python cv2在多个图像中错误地检测正方形

如何利用openCV函数查看opencv版本

OpenCV-Python实战(番外篇)——OpenCV中利用鼠标事件动态绘制图形

如何利用openCV做灰度图片

利用Anaconda软件安装opencv模块