从ArDrone 2.0获取图像,并使用cv2

时间:2014-11-03 22:09:31

标签: 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_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

有人可以告诉我,我做错了吗?

3 个答案:

答案 0 :(得分:1)

在我看来,在尝试使用它之前,您可能需要稍微更改逻辑以检查cap是否为None:

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

可能是当它处于切换图像的中间或类似的时间时,可能存在上限为无的一段时间。此外,您似乎没有更新上限指向每个循环的新图像,因此可能也是一个问题。

答案 1 :(得分:1)

你没有做错任何事。

pydrone库不能与AR.Drone 2.0视频流一起使用(我也不知道)。

AR.Drone 2.0有两个主要变化:

  • 流在TCP上;
  • 它基于H264,带有Parrot自定义标题。

您可以使用ffplay tcp://192.168.1.1:5555查看无人机中的视频(可能具有可怕的延迟)。

development foruns中有关于AR.Drone 2.0视频的更多信息。

答案 2 :(得分:1)

正如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()