注意:树莓派摄像头安装时,排线朝下图像为正。
当画面上下反转时,可以参考下面示例:
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: break flipped_frame = cv.flip(frame, 0) cv.imshow('frame', flipped_frame) if cv.waitKey(1) & 0xFF == ord('q'): breakcapture.release()cv.destroyAllWindows()2.使用自己的代码,且不想将排线的方向上下翻转安装。请修改自己对应的程序。
注意:RDK X5主板安装摄像头时,排线朝上摄像头画面为正
当画面上下反转时,可以参考下面示例:
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 = None try: cam = srcampy.Camera() # 创建相机对象 / Create camera object cam.open_cam(0, CAMERA_INDEX, FRAME_RATE, NV12_WIDTH, NV12_HEIGHT) # 打开相机 / Open camera while True: nv12_bytes = cam.get_img(2) # 获取图像数据 / Get image data if nv12_bytes is None: print("Failed to get image from camera.") # 获取图像失败提示信息 / Failed to get image message continue # 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 input if key == 27 or key == ord('q'): # 按ESC或'q'键退出循环(ASCII值27)/ Exit loop on ESC or 'q' key press (ASCII value 27) break except Exception as e: print(f"An error occurred: {e}") # 错误发生时的提示信息 / Error message when an exception occurs finally: if cam is not None: cam.close_cam() # 确保关闭相机连接 / Ensure camera connection is closed cv2.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 = 0 t_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 += 1 fps = m_fps / (time.time() - t_start) if (time.time() - t_start) >= 2: m_fps = fps t_start = time.time() - 1 text = 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.使用自己的代码,且不想将排线的方向上下翻转安装。请修改自己对应的程序。