2016-09-03 64 views
1

我正在追求一个与我玩的想法一点帮助。我想借此对OpenCV Python功能检测示例扩展

See sample image at bottom of page here 最后一节位于类似于示例代码的图像中的特征/示例是一个我谈论

特别是我的问题

我想用火柴在图像中指示以找到场景图像中的目标,如图所示的那样看似简单的添加。我想坐落在场景帧时绘制边界框围绕目标

Example of output I'm after

而不是仅仅把一个边界框周围的功能,我宁愿有代表的四个轮廓点的列表如果这是有意义的,则在场景框架上变换目标。

大图片,我想拍摄包含我的目标的场景图像的小部分,并将其从场景图像中剪出,将剩余图像中的非目标区域遮罩,然后将其作为我的源处理。

在这一点上,我已经设法完成所有需要的硬编码点集来表示目标图像的角点,这些角点在场景图像中被旋转和转换,所以一切正常,我只需要一个示例以确定该场景中目标的每个角落的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() 

回答

0

您需要找到两幅图像之间的规定变换。

根据匹配的特征创建一组相应的坐标。

例如,您发现图像1中的特征FtI1对应于图像2中的FtJ1,因此您知道FtI1(xi,yi)的坐标对应于FtJ1(xj,yj)的坐标,并且您拥有此功能相应的功能。 在您拥有两幅图像之间的对应坐标列表后,您可以使用opecv getPerspectiveTransform计算规范转换。

最后使用在第一个图像中包围形状的4个坐标上找到的变换来获取第二个图像中包围形状的坐标。 opencv的功能是warpPerspective。

怎么做,在opecv是一个例子: http://docs.opencv.org/3.1.0/da/d6e/tutorial_py_geometric_transformations.html

+0

这是一个很好的回答,非常感谢。我会在本周尝试下班后玩一玩,看看我是否可以做我需要的东西。 – SMBee