python+Opencv视频读取问题+官网光流法示例程序报错问题解决

注:适用于python2及Opencv2

    前几天安装了Opencv,与我的Anaconda配合使用,今天想测试一下Opencv下光流法的实现过程,但是第一步就卡在了视频读取上面,相信很多童鞋都遇到过类似错误。解决了这个问题之后,又去跑官网给的光流法示例程序,结果这段程序总是报错:

cv2.imshow('frame',img)
    同样滴,又屁颠屁颠去网上找决绝方案(小白伤不起~),最后勉强搞定。总的感觉就是网上的解决方案很多很杂,并不对每一个人都适用。这两个问题在stackoverflow上的解决方案比较完整,国内很多都是借鉴他们的,只不过英文可能让部分童鞋望而却步,但还是建议看一看,毕竟完整一些。

    第一个问题,读取视频文件出错,要修改动态链接库(dll)文件名和添加系统运行路径,详见:http://stackoverflow.com/questions/11699298/opencv-2-4-videocapture-not-working-on-windows。辅以:http://blog.csdn.net/heyijia0327/article/details/44034671。

    第二个问题,运行示例代码时那段代码总报错,原因官方给的代码可能库的版本不一样,所以上面有两行代码是不适用的:

mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
frame = cv2.circle(frame,(a,b),5,color[i].tolist(),-1)

改为:

#drawing is inplace replacement, line() and circle() will return None!
cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
cv2.circle(frame,(a,b),5,color[i].tolist(),-1)

    详见:http://stackoverflow.com/questions/11699298/opencv-2-4-videocapture-not-working-on-windows。

    希望能给同伴小白们提供帮助。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,您想了解关于稀疏光流在 Python OpenCV 中的应用和使用方法是吗?那么我可以简单地为您介绍一下。 稀疏光流是一种计算图像中像素运动的方法,它可以通过检测两个连续帧之间的像素强度变化来计算像素的运动向量。Python OpenCV提供了实现稀疏光流的函数 cv2.calcOpticalFlowPyrLK()。 以下是一个简单的示例代码,演示了如何使用稀疏光流来计算两个连续帧之间的像素运动: ``` import cv2 # 读取两个连续帧 frame1 = cv2.imread('frame1.jpg') frame2 = cv2.imread('frame2.jpg') # 转换为灰度图像 gray1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY) gray2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY) # 设置参数 lk_params = dict(winSize=(15, 15), maxLevel=2, criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03)) # 获取关键点 p0 = cv2.goodFeaturesToTrack(gray1, mask=None, maxCorners=100, qualityLevel=0.3, minDistance=7) # 计算光流 p1, st, err = cv2.calcOpticalFlowPyrLK(gray1, gray2, p0, None, **lk_params) # 选择好的点 good_new = p1[st == 1] good_old = p0[st == 1] # 绘制运动向量 for i, (new, old) in enumerate(zip(good_new, good_old)): a, b = new.ravel() c, d = old.ravel() frame1 = cv2.circle(frame1, (a, b), 5, (0, 255, 0), -1) frame1 = cv2.line(frame1, (a, b), (c, d), (255, 0, 0), 2) # 显示结果 cv2.imshow('frame', frame1) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上述示例代码中,我们首先读取了两个连续帧,然后将它们转换为灰度图像。接下来,我们使用 cv2.goodFeaturesToTrack() 函数获取了第一帧中的关键点,并将这些关键点作为稀疏光流的输入。然后,我们使用 cv2.calcOpticalFlowPyrLK() 函数计算了两个连续帧之间的稀疏光流。最后,我们选择好的点,并使用 cv2.circle() 和 cv2.line() 函数绘制了运动向量。 希望这个简单的示例代码可以帮助您更好地理解稀疏光流在 Python OpenCV 中的应用和使用方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值