我正在追求一个与我玩的想法一点帮助。我想借此对OpenCV Python功能检测示例扩展
See sample image at bottom of page here 最后一节位于类似于示例代码的图像中的特征/示例是一个我谈论
特别是我的问题我想用火柴在图像中指示以找到场景图像中的目标,如图所示的那样看似简单的添加。我想坐落在场景帧时绘制边界框围绕目标
而不是仅仅把一个边界框周围的功能,我宁愿有代表的四个轮廓点的列表如果这是有意义的,则在场景框架上变换目标。
大图片,我想拍摄包含我的目标的场景图像的小部分,并将其从场景图像中剪出,将剩余图像中的非目标区域遮罩,然后将其作为我的源处理。
在这一点上,我已经设法完成所有需要的硬编码点集来表示目标图像的角点,这些角点在场景图像中被旋转和转换,所以一切正常,我只需要一个示例以确定该场景中目标的每个角落的x,y共同点
我不想发布代码,因为它有点笨拙,它的概念我后,不是一个完整的这对我来说请'修复
任何意见,非常感谢,如果你可以告诉我使用示例代码附加如何做到这一点,我会非常感激,干杯。
import numpy as np
import cv2
from matplotlib import pyplot as plt
img1 = cv2.imread('box.png',0) # queryImage
img2 = cv2.imread('box_in_scene.png',0) # trainImage
# Initiate SIFT detector
sift = cv2.SIFT()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# FLANN parameters
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50) # or pass empty dictionary
flann = cv2.FlannBasedMatcher(index_params,search_params)
matches = flann.knnMatch(des1,des2,k=2)
# Need to draw only good matches, so create a mask
matchesMask = [[0,0] for i in xrange(len(matches))]
# ratio test as per Lowe's paper
for i,(m,n) in enumerate(matches):
if m.distance < 0.7*n.distance:
matchesMask[i]=[1,0]
draw_params = dict(matchColor = (0,255,0),
singlePointColor = (255,0,0),
matchesMask = matchesMask,
flags = 0)
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_params)
plt.imshow(img3,),plt.show()
这是一个很好的回答,非常感谢。我会在本周尝试下班后玩一玩,看看我是否可以做我需要的东西。 – SMBee