【OpenCV-Python】31.OpenCV的特征检测——示例

31.OpenCV的特征检测——示例



前言

  图像的特征是指图像中具有独特性和易于识别性的区域,角、边缘等都属于有意义的特征。OpenCV可以检测并提取图像的特征,并对其进行描述,以便用于图像匹配和搜索。


一、应用Shi-Tomasi角检测器

# 应用Shi-Tomasi角检测器
import cv2
import numpy as np

img = cv2.imread("bridge.jpg")
cv2.imshow("Bridge", img)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
corners = cv2.goodFeaturesToTrack(gray,10,0.1,10)
corners = np.int0(corners)
for i in corners:
    x, y = i.ravel()
    cv2.circle(img, (x,y), 4, (0,0,255), -1)

cv2.imshow("Shi-Tomasi",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


二、应用特征匹配查找对象

import cv2
import numpy as np

img1 = cv2.imread("printer1.jpg" )
img2 = cv2.imread("printer2.jpg" )

orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
bf = cv2.BFMatcher_create(cv2.NORM_HAMMING, crossCheck = True)
ms = bf.match(des1,des2)
ms = sorted(ms, key = lambda x:x.distance)
matchesMask = None
if len(ms) > 10:
    # 计算查询图像匹配结果的坐标
    querypts = np.float32([kp1[m.queryIdx].pt for m in ms]).reshape(-1,1,2)
    # 计算训练图像匹配结果的坐标
    trainpts = np.float32([kp2[m.trainIdx].pt for m in ms]).reshape(-1,1,2)
    # 执行查询图像和训练图像的透视转换
    retv, mask = cv2.findHomography(querypts, trainpts, cv2.RANSAC)
    # 计算最佳匹配结果的掩膜,用于绘制匹配匹配结果
    matchesMask = mask.ravel().tolist()
    h, w, c = img1.shape
    pts = np.float32([[0,0], [0,h-1], [w-1,h-1], [w-1,0]]).reshape(-1,1,2)
    # 执行向量的透视矩阵转换,获得查询图像在训练图像中的位置
    dst = cv2.perspectiveTransform(pts,retv)
    # 用白色的矩形在训练图像中绘制出查询图像的范围
    img2 = cv2.polylines(img2, [np.int32(dst)], True, (255,255,255),5)
    
img3 = cv2.drawMatches(img1, kp1, img2, kp2, ms, None,
                       matchColor = (0,255,0),
                       singlePointColor = (255,0,0),
                       matchesMask = matchesMask,
                       flags = cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

cv2.imshow("Result img",img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


三、OpenCV-Python资源下载

OpenCV-Python测试用图片、中文官方文档、opencv-4.5.4源码


总结

  以上内容介绍了OpenCV-Python的特征检测的相关示例,有关Python、数据科学、人工智能等文章后续会不定期发布,请大家多多关注,一键三连哟(●’◡’●)。

おすすめ

転載: blog.csdn.net/weixin_43843069/article/details/122254918