首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Jetson TX1嵌入式相机接收图像?

如何从Jetson TX1嵌入式相机接收图像?
EN

Stack Overflow用户
提问于 2016-04-16 01:21:11
回答 2查看 5.8K关注 0票数 2

我用最新的Jetpack (LinuxforTegraR23.2)显示了JetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsonJetsR23.2(LinuxforTegraR23.2),下面的命令非常有效:

代码语言:javascript
复制
gst-launch-1.0 nvcamerasrc fpsRange="30.0 30.0" ! 'video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)I420, framerate=(fraction)30/1' ! nvtee ! nvvidconv flip-method=2 ! 'video/x-raw(memory:NVMM), format=(string)I420' ! nvoverlaysink -e

我尝试使用以下python程序接收来自网络摄像头的图像:

来源:display.html

代码语言:javascript
复制
import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

我得到了以下错误:

代码语言:javascript
复制
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /hdd/buildbot/slave_jetson_tx_2/35-O4T-L4T-Jetson-L/opencv/modules/imgproc/src/color.cpp, line 3739
Traceback (most recent call last):
  File "webcam.py", line 11, in <module>
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.error: /hdd/buildbot/slave_jetson_tx_2/35-O4T-L4T-Jetson-L/opencv/modules/imgproc/src/color.cpp:3739: error: (-215) scn == 3 || scn == 4 in function cvtColor

我知道问题是它不能接收来自网络摄像头的图像。我还修改了代码,只显示从网络摄像头接收到的图像,但它给了我错误,这意味着它没有从相机获得的图像。

我还尝试在以下代码中使用C++:

代码语言:javascript
复制
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int argc, char** argv)
{
    VideoCapture cap;
    // open the default camera, use something different from 0 otherwise;
    // Check VideoCapture documentation.
    if(!cap.open(0))
        return 0;
    for(;;)
    {
          Mat frame;
          cap >> frame;
          if( frame.empty() ) break; // end of video stream
          imshow("this is you, smile! :)", frame);
          if( waitKey(1) == 27 ) break; // stop capturing by pressing ESC 
    }
    // the camera will be closed automatically upon exit
    // cap.close();
    return 0;
}

并且编译时没有任何错误。

代码语言:javascript
复制
g++ webcam.cpp -o webcam `pkg-config --cflags --libs opencv` 

但是,再次,当我运行程序时,我会收到以下错误:

代码语言:javascript
复制
$ ./webcam
Unable to stop the stream.: Device or resource busy
Unable to stop the stream.: Bad file descriptor
VIDIOC_STREAMON: Bad file descriptor
Unable to stop the stream.: Bad file descriptor

我错过了什么?在运行这个程序之前,有什么命令我应该运行来激活摄像头吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-18 14:30:59

根据nvidia论坛,您需要使gstreamer管道正确。而目前opencv还不能自动检测到at摄像机的流。

我让它工作的唯一方法是使用Opencv3和这行代码来获取视频:

cap = cv2.VideoCapture("nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)640, height=(int)480, format=(string)I420, framerate=(fraction)30/1 ! nvvidconv flip-method=2 ! video/x-raw, format=(string)I420 ! videoconvert ! video/x-raw, format=(string)BGR ! appsink")

票数 2
EN

Stack Overflow用户

发布于 2016-12-21 06:46:19

谢谢这个线程提供的所有信息,无论如何,我刚刚从TX1相机模块获得了我的python作品。

重要的是,我们需要安装OpenCV 3.1.0,您可以按照官方的构建方法,将pythoncv2.so lib替换为3.1.0版本。原始的l4t OpenCV是2.4。

另一件重要的事情是使用正确的nvcamerasrc;尝试c

代码语言:javascript
复制
ap = cv2.VideoCapture("nvcamerasrc ! video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)I420, framerate=(fraction)30/1 ! nvtee ! nvvidconv flip-method=2 ! video/x-raw(memory:NVMM), format=(string)I420 ! nvoverlaysink -e ! appsink")

它在我的TX1上工作,只是为了在这里分享。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36659151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档