2016-07-07 30 views
0

在单个帧中,我已经通过facecascade检测到多个脸部。 我也通过goodFeaturesToTrack应用了一个循环来确定每个面的p0。现在我想结合所有这些p0,这样我可以把它作为参数传递给calcOpticalFlowPyrLK功能:如何将多个特征点数组合在一个单独的一个中

for (x, y, w, h) in first_faces: 
    cv2.rectangle(first_frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 
    roi_first_gray = first_gray[y:y+h, x:x+w] 
    p0 = cv2.goodFeaturesToTrack(roi_first_gray, mask=None, maxCorners=200, qualityLevel=0.1, minDistance=7, blockSize=7) 

现在,这里在first_faces一个p0像第一面是每一张脸:

[[[ 479. 319.]] 
[[ 407. 373.]] 
[[ 334. 387.]] 
[[ 343. 371.]] 
[[ 369. 369.]]] 

类型的,这是numpy.ndarray

回答

0

可以使用numpy.concatenate

import numpy as np 
p0 = np.array([[[479.0, 319.0]], 
       [[407.0, 373.0]], 
       [[334.0, 387.0]], 
       [[343.0, 371.0]], 
       [[369.0, 369.0]]]) 
p1 = np.array([[[279.0, 119.0]], 
       [[207.0, 173.0]], 
       [[134.0, 187.0]], 
       [[143.0, 171.0]], 
       [[169.0, 169.0]]]) 
print(np.concatenate((p0, p1), axis=0)) 
print(np.concatenate((p0, p1), axis=1)) 

我不知道什么格式的信息,您需要的opencv函数或为什么你的数组有一个额外的维度。

+0

已经尝试过,没有工作 –

+0

它以什么方式没有工作。即程序是否会崩溃并显示错误消息?它运行但不跟踪任何面孔?它是否运行,但只跟踪第一张脸?如果你仅仅使用图像第一面的p0,或者第二或第三面不要试图连接它们,会发生什么?如果您为每个单独的面打印p0数组的形状并试图连接它们后会得到什么结果? – paddyg

相关问题