gab*_*elh 4 python opencv numpy python-2.7
我正在尝试使用cv2.calcOpticalFlowPyrLK在Python上实现用于光流的Lucas-Kanade算法.但是,当我尝试绘制一条线来连接当前点和先前点以及点本身时,函数返回None.
这是代码
#draw the overlaying tracking img
for i,(new,old) in enumerate(zip(good_new,good_old)):
a,b = new.ravel() #tmp new value
c,d = old.ravel() #tmp old value
#draws a line connecting the old point with the new point
mask = cv2.line(mask,(a,b),(c,d),color[i].tolist(),2) #returns None... why??
#draws the new point
frame = cv2.circle(frame,(a,b),5,color[i].tolist(),-1) #returns None... why??
img = cv2.add(frame,mask)
#show on window
cv2.imshow("frame",img)
Run Code Online (Sandbox Code Playgroud)
a,b,c,d是numpy.float32
frame是我从网络摄像头读取的值
mask是init到一个零数组
颜色是随机数组
这是我尝试imshow时收到的错误消息
error: /Users/vagrant/pisi-64bit/tmp/opencv-2.4.5-2/work/opencv-2.4.5/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat
Run Code Online (Sandbox Code Playgroud)
我非常感谢你的帮助!
小智 11
根据OpenCV文档,cv2.line()和cv2.circle()始终返回None.http://docs.opencv.org/modules/core/doc/drawing_functions.html
这些方法是适当的方法,因此它们会改变您传递给它们的第一个参数.请参阅此Stack Overflow问题,该问题描述了这些类型的函数:Python就地操作符函数与标准操作符函数有何不同?
您的固定代码应如下所示:
#draw the overlaying tracking img
for i,(new,old) in enumerate(zip(good_new,good_old)):
a,b = new.ravel() #tmp new value
c,d = old.ravel() #tmp old value
#draws a line connecting the old point with the new point
cv2.line(mask,(a,b),(c,d),color[i].tolist(),2) #returns None... why??
#draws the new point
cv2.circle(frame,(a,b),5,color[i].tolist(),-1) #returns None... why??
img = cv2.add(frame,mask)
Run Code Online (Sandbox Code Playgroud)