计算机视觉基础18

阅读: 评论:0

计算机视觉基础18

计算机视觉基础18

参考书目:《OpenCV计算机视觉基础教程》–夏帮贵。
代码编写:Jupyter Notebook。



# 模板匹配:在当前图像中查找与目标图像最相近的部分;
# 图像分割:将前景对象从图像中分割或提取出来;# 模板匹配:让模板图像在输入图像中滑动,逐像素遍历整个图像进行比较,查找与模板图像最匹配的部分;# 1.单目标匹配:输入图像中只存在一个可能匹配结果;
# 语法格式:result = cv2.matchTemplate(image, templ, method)
# 参数说明:# a.image:输入图像,必须为8位或32位浮点类型;
# b.temp1:模板图像,不能大于image,且数据类型要和image相同;# c.method:匹配方法
# c.1:cv2.TM_SQDIFF:以方差结果为依据进行匹配;完全匹配时结果为0,否则为一个很大的值;
# c.2:cv2.TM_SQDIFF_NORMED:标准(归一化)方差匹配;
# c.3:cv2.TM_CCORR:相关匹配,将输入图像与模板图像相乘,乘积越大匹配度越高,乘积为0时匹配度最低;
# c.4:cv2.TM_CCORR_NORMED:标准(归一化)相关匹配;
# c.5:cv2.TM_CCOEFF:相关系数匹配,将输入图像与其均值的相关值和模板图像与其均值的相关值进行匹配;
# 结果为1时,表示完美匹配;结果为-1时,表示糟糕匹配;结果为0时,表示没有任何相关性;
# c.6:cv2.TM_CCOEFF_NORMED:标准(归一化)相关系数匹配;# d.result:返回结果;若输入图像大小为:W×H,模板图像大小为:w×h,则result大小为:(W - w + 1) × (H - h + 1);
# 其中的每个值都表示对应位置的匹配结果;# cv2.minMaxLoc()函数处理匹配结果
# 语法格式:minVal,maxVal,minLoc,maxLoc = cv2.minMaxLoc(src)
# 参数说明:
# a.src:cv2.matchTemplate()函数返回的结果;
# b.minVal:src中的最小值,不存在时可以为NULL;
# c.maxVal:src中的最大值,不存在时可以为NULL;
# d.minLoc:src中最小值的位置,不存在时可以为NULL;
# e.maxLoc:src中最大值的位置,不存在时可以为NULL;
import cv2 as cv
import numpy as np
import matplotlib.pyplot as pltimg1 = cv.imread("fuxi_qrcode.jpg")
temp = cv.imread("qrcode.JPG")              # 模板图像cv.imshow("Original", img1)
cv.imshow("Template", temp)img1gray = cv.cvtColor(img1, cv.COLOR_BGR2GRAY, dstCn = 1)
tempgray = cv.cvtColor(temp, cv.COLOR_BGR2GRAY, dstCn = 1)h, w = tempgray.shape    # 获取模板图像的高度和宽度
res = cv.matchTemplate(img1gray, tempgray, cv.TM_SQDIFF)    # 执行模板匹配plt.imshow(res, cmap = "gray")
plt.title("matching result")
plt.axis("off")
plt.show()min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)    # 返回最值和位置top_left = min_loc
bottom_right = (top_left[0] + w, top_left[1] + angle(img1, top_left, bottom_right, (255, 0, 0), 2)
cv.imshow("Detected Range", img1)
cv.waitKey(0)

# 2.多目标匹配
# 多目标匹配:输入图像中存在多个可能的匹配结果;
import cv2 as np
import numpy as np
import matplotlib.pyplot as pltimg1 = cv.imread("fuxi_qrcode1.jpg")
temp = cv.imread("qrcode.JPG")cv.imshow("Original", img1)
cv.imshow("qrcode", temp)img1gray = cv.cvtColor(img1, cv.COLOR_BGR2GRAY, dstCn = 1)
tempgray = cv.cvtColor(temp, cv.COLOR_BGR2GRAY, dstCn = 1)img1h, img1w = img1gray.shape
th, tw = tempgray.shaperes = cv.matchTemplate(img1gray, tempgray, cv.TM_SQDIFF_NORMED)
mloc = []
threshold = 0.24for i in range(img1h - th):for j in range(img1w - tw):if res[i][j] <= threshold:mloc.append((j, i))
for pt in angle(img1, pt, (pt[0] + tw, pt[1] + th), (255, 0, 0), 2)cv.imshow("result", img1)
cv.waitKey(0)

本文发布于:2024-01-30 04:53:43,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170656162719359.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:视觉   计算机   基础
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23