gpt4 book ai didi

opencv - 打开 cv 在 jetson nano 上显示绿屏

转载 作者:行者123 更新时间:2023-12-02 16:31:06 50 4
gpt4 key购买 nike

我的相机显示绿屏。我正在使用 IMX 219 我不知道为什么相机给出 this output

import cv2

cap=cv2.VideoCapture(0)

while True:
r,im=cap.read()
cv2.imshow('dd',im)
k=cv2.waitKey(30) & 0xff
if k==27:
break

cap.release()
cv2.destroyAllWindows()

最佳答案

再见,
一般理论
this link 中所述,您可以使用 v4l2-ctl以确定相机功能。 v4l2-ctlv4l-utils :

$ sudo apt-get install v4l-utils
进而:
$ v4l2-ctl --list-formats-ext
寻找相同的链接和 this other ,我看到你也可以快速测试你的相机启动:
# Simple Test
# Ctrl^C to exit
# sensor_id selects the camera slot: 0 or 1 on Jetson Nano B01
$ gst-launch-1.0 nvarguscamerasrc sensor_id=0 ! nvoverlaysink
这个简单的 gst-launch示例可用于确定您正在使用的传感器报告的相机模式。例如说你得到这个输出:
GST_ARGUS: 3264 x 2464 FR = 21.000000 fps Duration = 47619048 ; Analog Gain range min 1.000000, max 10.625000; Exposure Range min 13000, max 683709000 
那么你应该相应地调整下一个命令:
$ gst-launch-1.0 nvarguscamerasrc sensor_id=1 ! \
'video/x-raw(memory:NVMM),width=3264, height=2464, framerate=21/1, format=NV12' ! \
nvvidconv flip-method=0 ! 'video/x-raw, width=816, height=616' ! \
nvvidconv ! nvegltransform ! nveglglessink -e
sensor_id=1代表正确的CSI摄像头插槽,可以是 01 .正如您从 this link 中看到的,较新的 Jetson Nano 开发套件带有两个 CSI 摄像头插槽,您可以使用此属性指定正确的一个 [ 0是默认值]。请注意,在同一链接中,他们使用 sensor_mode而不是 sensor_id ,我会同时尝试。您不一定需要包含 flip-method记录在案 here尽管。所有这些都应该让您了解要插入代码中的值
此外,还注意到显示变换对宽度和高度敏感 [在上面的例子中, width=816, height=616 ]。如果您遇到问题,请检查您的显示宽度和高度是否与选择的相机帧尺寸相同[在上例中,816 和 616 分别是 3264 和 2464 的四分之一]
OpenCV
在 nVidia 论坛上环顾四周,我发现 this post .在这种情况下的解决方案是使用:
cap = cv2.VideoCapture('nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3280, height=2464, format=(string)NV12, framerate=(fraction)20/1 ! nvvidconv ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink', cv2.CAP_GSTREAMER)
但是,在您的情况下,如果帧大小等于 3280x2464,IMX 219 的 20fps 会太高。 .正如您从 this link 的第一个表中看到的那样建议值为 15fps 而 here他们建议21fps。我建议你从 width 开始, height , framerate上一节中检索到的值。一个 framerate低于标称值的值应该可以帮助您测试连接性
cap = cv2.VideoCapture('nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3280, height=2464, format=(string)NV12, framerate=(fraction)15/1 ! nvvidconv ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink', cv2.CAP_GSTREAMER)
包含上一行的完整示例 更新了正确的值 有货 from here :
# MIT License
# Copyright (c) 2019 JetsonHacks
# See license
# Using a CSI camera (such as the Raspberry Pi Version 2) connected to a
# NVIDIA Jetson Nano Developer Kit using OpenCV
# Drivers for the camera and OpenCV are included in the base image

import cv2

# gstreamer_pipeline returns a GStreamer pipeline for capturing from the CSI camera
# Defaults to 1280x720 @ 60fps
# Flip the image by setting the flip_method (most common values: 0 and 2)
# display_width and display_height determine the size of the window on the screen


def gstreamer_pipeline(
capture_width=1280,
capture_height=720,
display_width=1280,
display_height=720,
framerate=60,
flip_method=0,
):
return (
"nvarguscamerasrc ! "
"video/x-raw(memory:NVMM), "
"width=(int)%d, height=(int)%d, "
"format=(string)NV12, framerate=(fraction)%d/1 ! "
"nvvidconv flip-method=%d ! "
"video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
"videoconvert ! "
"video/x-raw, format=(string)BGR ! appsink"
% (
capture_width,
capture_height,
framerate,
flip_method,
display_width,
display_height,
)
)


def show_camera():
# To flip the image, modify the flip_method parameter (0 and 2 are the most common)
print(gstreamer_pipeline(flip_method=0))
cap = cv2.VideoCapture(gstreamer_pipeline(flip_method=0), cv2.CAP_GSTREAMER)
if cap.isOpened():
window_handle = cv2.namedWindow("CSI Camera", cv2.WINDOW_AUTOSIZE)
# Window
while cv2.getWindowProperty("CSI Camera", 0) >= 0:
ret_val, img = cap.read()
cv2.imshow("CSI Camera", img)
# This also acts as
keyCode = cv2.waitKey(30) & 0xFF
# Stop the program on the ESC key
if keyCode == 27:
break
cap.release()
cv2.destroyAllWindows()
else:
print("Unable to open camera")


if __name__ == "__main__":
show_camera()
this other link 上还有一个完整的片段可用。这可以帮助您找到失败的原因
import cv2
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst

def read_cam():
cap = cv2.VideoCapture("nvarguscamerasrc ! video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080,format=(string)NV12, framerate=(fraction)30/1 ! nvvidconv ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink")
if cap.isOpened():
cv2.namedWindow("demo", cv2.WINDOW_AUTOSIZE)
while True:
ret_val, img = cap.read();
cv2.imshow('demo',img)
if cv2.waitKey(30) == ord('q'):
break
else:
print ("camera open failed")

cv2.destroyAllWindows()

if __name__ == '__main__':
print(cv2.getBuildInformation())
Gst.debug_set_active(True)
Gst.debug_set_default_threshold(3)
read_cam()
最后,如果您可以从命令行在 GStreamer 中打开相机,但不能在 Python 中打开相机,请使用以前的 print(cv2.getBuildInformation()) 检查 OpenCV 版本。或更短时间:
print(cv2.__version__)
从 L4T 32.2.1/JetPack 4.2.2 开始,GStreamer 支持内置于 OpenCV 中。这些版本的 OpenCV 版本是 3.3.1,如果您使用早期版本的 OpenCV [很可能从 Ubuntu 存储库安装],您将获得 Unable to open camera错误
祝你有美好的一天,
安东尼诺

关于opencv - 打开 cv 在 jetson nano 上显示绿屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64272731/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com