1、获取摄像头通道。
运行如下命令:
grep "mainpath" /sys/class/video4linux/video*/name
查找到可以用的摄像头通道为video22与video30.
/sys/class/video4linux/video22/name:rkisp_mainpath
/sys/class/video4linux/video30/name:rkisp_mainpath
通过测试后,实际连接为video30
2、安装opencv,直接使用pip3安装即可。
3、编写测试代码如下:
import os
import warnings
import numpy as np
os.environ["QT_QPA_PLATFORM"] = "xcb"
os.environ["CV2_DISABLE_QT"] = "0"
warnings.filterwarnings('ignore')
import cv2
CAMERA_DEVICE = "/dev/video30"
cap = cv2.VideoCapture(CAMERA_DEVICE, cv2.CAP_V4L2)
if not cap.isOpened():
print(f"❌ 无法打开 {CAMERA_DEVICE}!")
print("临时授权:sudo chmod 666 /dev/video30")
print("永久授权:sudo usermod -aG video nano && 注销重登")
exit()
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
cap.set(cv2.CAP_PROP_FPS, 20)
ret, frame = cap.read()
if not ret:
print("⚠️ 读取画面失败,检查摄像头硬件!")
cap.release()
exit()
height, width = frame.shape[:2]
channels = frame.shape[-1] if len(frame.shape) >= 3 else 1
print(f"? 摄像头配置:{width}x{height} | 通道数:{channels}")
print("✅ 画面已显示,按以下按键操作:")
print(" - 'q':退出程序")
print(" - 's':保存当前帧到当前目录(capture.jpg)")
print(" - 'f':切换全屏/窗口模式")
fullscreen = False
while True:
ret, frame = cap.read()
if not ret:
print("⚠️ 帧读取失败,跳过")
continue
if channels == 3:
try:
frame_bgr = cv2.cvtColor(frame, cv2.COLOR_YUV2BGR_NV12)
except:
try:
frame_bgr = cv2.cvtColor(frame, cv2.COLOR_YUV2BGR_YV12)
except:
frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
cv2.imshow("RKISP Camera (Xfce Desktop)", frame_bgr)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
elif key == ord('s'):
cv2.imwrite("capture.jpg", frame_bgr)
print("? 图片已保存为 capture.jpg")
elif key == ord('f'):
fullscreen = not fullscreen
flag = cv2.WINDOW_FULLSCREEN if fullscreen else cv2.WINDOW_NORMAL
cv2.setWindowProperty("RKISP Camera (Xfce Desktop)", cv2.WND_PROP_FULLSCREEN, flag)
cap.release()
cv2.destroyAllWindows()
print("✅ 程序正常退出,摄像头已释放")
5、将文件上传到开发板的/home/nano/Documents目录下面,在桌面打开终端执行。显示效果如下:

|