注意:树莓派摄像头安装时,排线朝下图像为正。
当画面上下反转时,可以参考下面示例:
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-8
import cv2 as cv
capture = 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'):
break
capture.release()
cv.destroyAllWindows()
2.使用自己的代码,且不想将排线的方向上下翻转安装。请修改自己对应的程序。
注意:RDK X5主板安装摄像头时,排线朝上摄像头画面为正
当画面上下反转时,可以参考下面示例:
1.可以将排线的方向朝下安装,
也可以参考下面的的opencv的Python上下翻转源码。
xxxxxxxxxx
#!/usr/bin/env python3
import cv2
from hobot_vio import libsrcampy as srcampy
import numpy as np
# Constants for camera settings / 相机设置常量
CAMERA_INDEX = -1 # 相机索引 / Camera index
FRAME_RATE = 30 # 帧率 / Frame rate
WIDTH = 640 # 图像宽度 / Image width
HEIGHT = 480 # 图像高度 / Image height
NV12_HEIGHT = 1620 # NV12图像缓冲区高度 (Y + UV) / Height of NV12 image buffer (Y + UV)
NV12_WIDTH = 1920 # NV12图像缓冲区宽度 / Width of NV12 image buffer
def 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 windows
if __name__ == '__main__':
main()
2.使用自己的代码,且不想将排线的方向上下翻转安装。请修改自己对应的程序。
注意:RDK X3主板安装摄像头时,排线朝下摄像头画面为正
当画面上下反转时,可以参考下面示例:
1.可以将排线的方向朝上安装,
也可以参考下面的的opencv的Python上下翻转源码。
xxxxxxxxxx
import cv2
import time
from SunriseRobotLib import Mipi_Camera
# 设置相机参数
width = 640
height = 480
g_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'):
break
except Exception as e:
print("Exception:", e)
except KeyboardInterrupt:
print("KeyboardInterrupt")
finally:
# 在结束时释放资源
g_camera.release()
cv2.destroyAllWindows()
2.使用自己的代码,且不想将排线的方向上下翻转安装。请修改自己对应的程序。