双目摄像头标定时要同时保存左右两个镜头所拍摄的画面,但有的双目相机是两个镜头公用一个ID,所以直接拍照后直接拟合输出一张图片,无法标定。以下代码调用cv库,实现左右镜头图片拍摄并保存。
import cv2
import os
# 打开摄像头
cap = cv2.VideoCapture(0)
# 设置捕获视频的宽度和高度
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 2560)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
count1 = 0
count2 = 0
# 指定保存图像的文件夹
output_folder = r"C:\Users\28571\Desktop\yolov8-train-image-video\测距\标定图片" # 请替换为实际文件夹的路径
if not os.path.exists(output_folder):
os.makedirs(output_folder)
while True:
ret, frame = cap.read()
if not ret:
print("摄像头捕获失败!")
break
# 对捕获的图像进行缩放
scale = 0.5
frame = cv2.resize(frame, None, fx=scale, fy=scale)
# 分割左右两个摄像头的图像
frame_L = frame[:, :frame.shape[1] // 2]
frame_R = frame[:, frame.shape[1] // 2:]
cv2.imshow("Video_L", frame_L) # 显示左摄像头图像
cv2.imshow("Video_R", frame_R) # 显示右摄像头图像
key = cv2.waitKey(50)
if key == 27: # 按下ESC退出
break
if key == 32: # 按下空格键保存图像
count1 += 1
count2 += 1
image_left = os.path.join(output_folder, f"image_left_{count1}.jpg")
image_right = os.path.join(output_folder, f"image_right_{count2}.jpg")
cv2.imwrite(image_left, frame_L)
cv2.imwrite(image_right, frame_R)
cv2.imshow("图片1", frame_L)
cv2.imshow("图片2", frame_R)
# 释放摄像头资源
cap.release()
cv2.destroyAllWindows()