Python 从ArDrone 2.0获取图像,并使用cv2
我试图从ArDrone 2.0获取图像,并使用Python OpenCV、cv2处理图像并创建控制器 这是我的代码:Python 从ArDrone 2.0获取图像,并使用cv2,python,string,opencv,ar.drone,Python,String,Opencv,Ar.drone,我试图从ArDrone 2.0获取图像,并使用Python OpenCV、cv2处理图像并创建控制器 这是我的代码: import cv2 import numpy as np from pydrone import libardrone drone = libardrone.ARDrone() cap = drone.image while(True): ret, frame = cap gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GR
import cv2
import numpy as np
from pydrone import libardrone
drone = libardrone.ARDrone()
cap = drone.image
while(True):
ret, frame = cap
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
然而,我一直遇到这个问题:
Traceback (most recent call last):
File "ArDrn/7/drony.py", line 14, in <module>
ret, frame = cap
TypeError: 'NoneType' object is not iterable
回溯(最近一次呼叫最后一次):
文件“ArDrn/7/drony.py”,第14行,在
ret,frame=cap
TypeError:“非类型”对象不可编辑
有人能告诉我我做错了什么吗?在我看来,在尝试使用cap之前,您可能需要稍微更改逻辑以检查cap是否为无:
while(True):
cap = drone.image
if not cap:
time.sleep(0.1) # or something to save just a touch of CPU spin time, optional
continue
ret, frame = cap
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
也许是在切换图像或类似时间的中间,可能有一段时间CAP是不存在的。此外,似乎您没有更新cap以在每个循环中指向一个新图像,因此这可能也是一个问题。
您没有做错什么 pydrone库不适用于AR.Drone 2.0视频流(我知道没有一个可以) AR.Drone 2.0有两大变化:- 流在TCP上李>
- 它基于H264,具有Parrot自定义标题
ffplay从无人机上观看视频tcp://192.168.1.1:5555
(可能会有可怕的延迟)
关于AR.Drone 2.0视频的更多信息,请参见。正如mangon所述,libardrone中的视频支持已中断。 但是你不需要libardrone来访问视频源。以下是一个使用OpenCV的简单示例:
import cv2
cam = cv2.VideoCapture('tcp://192.168.1.1:5555')
running = True
while running:
# get current frame of video
running, frame = cam.read()
if running:
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == 27:
# escape key pressed
running = False
else:
# error reading frame
print 'error reading video feed'
cam.release()
cv2.destroyAllWindows()
是的,这似乎解决了问题。然而,我刚刚意识到drone.image是一个字符串而不是图像。我只需要把它转换一下。