注意:树莓派摄像头安装时,排线朝下图像为正。
当画面上下反转时,可以参考下面示例:
1.使用树莓派自带的摄像头启动命令
rpicam-hello
rpicam-jpeg
rpicam-still
rpicam-vid
使用以上的命令是需要加上--vflip 参数实现上下翻转,以下是示例
rpicam-hello --vflip -t 0
2.不使用自带启动摄像头命令或者不使用参数。可以将排线朝上安装。
也可以参考以下的opencv的Python代码。
ximport cv2# 打开默认的摄像头cap = cv2.VideoCapture(0)while True:# 读取帧ret, frame = cap.read()if not ret:break# 翻转图像# 参数1:要翻转的图像# 参数2:翻转方向,0=沿X轴翻转,正值=沿Y轴翻转,负值=沿XY轴同时翻转flipped_frame = cv2.flip(frame, 0) # 上下翻转# 如果你需要左右翻转,则使用 1 而不是 0# 如果你需要同时上下左右翻转,则使用 -1# 显示原图和翻转后的图像cv2.imshow('Original', frame)cv2.imshow('Flipped', flipped_frame)# 按 'q' 键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口cap.release()cv2.destroyAllWindows()
3.如果是想要用自己的代码,且不想将排线的方向上下翻转安装。请修改自己对应的程序。
注意:jetson系列主板安装摄像头时,排线朝上摄像头画面为正
当画面上下反转时,可以参考下面示例:
1.可以将排线的方向朝下安装
也可以参考下面的的opencv的Python上下翻转源码。
xxxxxxxxxx#!/usr/bin/env python# encoding: utf-8import cv2 as cvcapture = cv.VideoCapture("nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, format=(string)NV12, framerate=(fraction)60/1 ! nvvidconv flip-method=0 ! video/x-raw, width=1280, height=720, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink", cv.CAP_GSTREAMER)print("capture get FPS : ", capture.get(cv.CAP_PROP_FPS))while capture.isOpened():ret, frame = capture.read()if not ret:breakflipped_frame = cv.flip(frame, 0)cv.imshow('frame', flipped_frame)if cv.waitKey(1) & 0xFF == ord('q'):breakcapture.release()cv.destroyAllWindows()
2.使用自己的代码,且不想将排线的方向上下翻转安装。请修改自己对应的程序。
注意:RDK X5和S100主板安装摄像头时,排线朝上摄像头画面为正
当画面上下反转时,可以参考下面示例:
1.可以将排线的方向朝下安装,
也可以参考下面的的opencv的Python上下翻转源码。
xxxxxxxxxx#!/usr/bin/env python3import cv2from hobot_vio import libsrcampy as srcampyimport numpy as np# Constants for camera settings / 相机设置常量CAMERA_INDEX = -1 # 相机索引 / Camera indexFRAME_RATE = 30 # 帧率 / Frame rateWIDTH = 640 # 图像宽度 / Image widthHEIGHT = 480 # 图像高度 / Image heightNV12_HEIGHT = 1620 # NV12图像缓冲区高度 (Y + UV) / Height of NV12 image buffer (Y + UV)NV12_WIDTH = 1920 # NV12图像缓冲区宽度 / Width of NV12 image bufferdef main():cam = Nonetry:cam = srcampy.Camera() # 创建相机对象 / Create camera objectcam.open_cam(0, CAMERA_INDEX, FRAME_RATE, NV12_WIDTH, NV12_HEIGHT) # 打开相机 / Open camerawhile True:nv12_bytes = cam.get_img(2) # 获取图像数据 / Get image dataif nv12_bytes is None:print("Failed to get image from camera.") # 获取图像失败提示信息 / Failed to get image messagecontinue# Convert NV12 bytes to a NumPy array and reshape it correctly / 将NV12字节转换为NumPy数组并正确重塑形状nv12_np = np.frombuffer(nv12_bytes, dtype=np.uint8).reshape(NV12_HEIGHT, NV12_WIDTH)# Convert NV12 format to BGR format using OpenCV / 使用OpenCV将NV12格式转换为BGR格式bgr8_np = cv2.cvtColor(nv12_np, cv2.COLOR_YUV420SP2BGR) # 使用BGR / Use BGR# Resize the image for display purposes / 调整图像大小以便于显示bgr8_np_resized = cv2.resize(bgr8_np, (WIDTH, HEIGHT))# Flip the frame vertically (upside down) / 上下翻转图像bgr8_np_flipped = cv2.flip(bgr8_np_resized, 0) # 0 表示沿X轴翻转(上下翻转)# Show the frame in a window named 'Camera Preview' / 在名为“Camera Preview”的窗口中显示帧cv2.imshow('Camera Preview', bgr8_np_flipped)key = cv2.waitKey(1) # 等待键盘输入 / Wait for keyboard inputif key == 27 or key == ord('q'): # 按ESC或'q'键退出循环(ASCII值27)/ Exit loop on ESC or 'q' key press (ASCII value 27)breakexcept Exception as e:print(f"An error occurred: {e}") # 错误发生时的提示信息 / Error message when an exception occursfinally:if cam is not None:cam.close_cam() # 确保关闭相机连接 / Ensure camera connection is closedcv2.destroyAllWindows() # 销毁所有OpenCV窗口 / Destroy all OpenCV windowsif __name__ == '__main__':main()
2.使用自己的代码,且不想将排线的方向上下翻转安装。请修改自己对应的程序。
注意:RDK X3主板安装摄像头时,排线朝下摄像头画面为正
当画面上下反转时,可以参考下面示例:
1.可以将排线的方向朝上安装,
也可以参考下面的的opencv的Python上下翻转源码。
xxxxxxxxxximport cv2import timefrom SunriseRobotLib import Mipi_Camera# 设置相机参数width = 640height = 480g_camera = Mipi_Camera(width, height, debug=True)if g_camera.isOpened():print("Open Camera OK")else:print("Fail To Open Camera")try:m_fps = 0t_start = time.time()while g_camera.isOpened():ret, frame = g_camera.read()if not ret:print("Camera Read Fail")break# 垂直翻转图像frame = cv2.flip(frame, 0) # flipCode=0 表示垂直翻转m_fps += 1fps = m_fps / (time.time() - t_start)if (time.time() - t_start) >= 2:m_fps = fpst_start = time.time() - 1text = f"FPS: {int(fps)}"cv2.putText(frame, text, (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 1)# 使用OpenCV显示图像cv2.imshow('Camera Preview', frame)# 检查是否按下了 'q' 键或 ESC 键以退出循环key = cv2.waitKey(1)if key == 27 or key == ord('q'):breakexcept Exception as e:print("Exception:", e)except KeyboardInterrupt:print("KeyboardInterrupt")finally:# 在结束时释放资源g_camera.release()cv2.destroyAllWindows()
2.使用自己的代码,且不想将排线的方向上下翻转安装。请修改自己对应的程序。