import cv2 import numpy as np import time # 创建一个窗口,用于显示拼接后的图像 window_name = "Multi-camera Display" cv2.namedWindow(window_name) # 获取四个摄像头的视频捕捉对象 cap1 = cv2.VideoCapture(0) cap2 = cv2.VideoCapture(1) cap3 = cv2.VideoCapture(2) cap4 = cv2.VideoCapture(3) while True: start_time = time.time() # 记录开始时间 # 读取第一个摄像头的图像帧 ret1, frame1 = cap1.read() # 如果第一个摄像头无法读取图像,则退出循环 if not ret1: print("无法获取第一个摄像头的图像") break # 读取第二个摄像头的图像帧 ret2, frame2 = cap2.read() # 如果第二个摄像头无法读取图像,则退出循环 if not ret2: print("无法获取第二个摄像头的图像") break # 读取第三个摄像头的图像帧 ret3, frame3 = cap3.read() # 如果第三个摄像头无法读取图像,则退出循环 if not ret3: print("无法获取第三个摄像头的图像") break # 读取第四个摄像头的图像帧 ret4, frame4 = cap4.read() # 如果第四个摄像头无法读取图像,则退出循环 if not ret4: print("无法获取第四个摄像头的图像") break # 将四个摄像头的图像帧拼接在一起 upper_row = np.hstack((frame1, frame2)) lower_row = np.hstack((frame3, frame4)) display_img = np.vstack((upper_row, lower_row)) # 显示拼接后的图像 cv2.imshow(window_name, display_img) # 按下ESC键退出显示 if cv2.waitKey(1) == 27: break end_time = time.time() # 记录结束时间 elapsed_time = end_time - start_time # 计算耗时 print(f"每次循环耗时:{elapsed_time:.4f}秒") # 释放摄像头资源 cap1.release() cap2.release() cap3.release() cap4.release() # 关闭窗口 cv2.destroyAllWindows() 在上面的代码中增加配置文件con.ini配置摄像头ID
时间: 2024-04-18 22:33:56 浏览: 104
要在上面的代码中增加配置文件`con.ini`来配置摄像头ID,可以使用`configparser`模块来读取配置文件。以下是修改后的代码示例:
```python
import cv2
import configparser
import numpy as np
import time
# 读取配置文件
config = configparser.ConfigParser()
config.read('con.ini')
# 获取摄像头ID
camera_ids = [int(config.get('CameraIDs', f'camera{i}')) for i in range(1, 5)]
# 创建一个窗口,用于显示拼接后的图像
window_name = "Multi-camera Display"
cv2.namedWindow(window_name)
# 获取四个摄像头的视频捕捉对象
caps = [cv2.VideoCapture(camera_id) for camera_id in camera_ids]
while True:
start_time = time.time() # 记录开始时间
frames = []
rets = []
# 读取四个摄像头的图像帧
for cap in caps:
ret, frame = cap.read()
rets.append(ret)
frames.append(frame)
# 如果有任何一个摄像头无法读取图像,则退出循环
if not all(rets):
print("无法获取某个摄像头的图像")
break
# 将四个摄像头的图像帧拼接在一起
upper_row = np.hstack((frames[0], frames[1]))
lower_row = np.hstack((frames[2], frames[3]))
display_img = np.vstack((upper_row, lower_row))
# 显示拼接后的图像
cv2.imshow(window_name, display_img)
# 按下ESC键退出显示
if cv2.waitKey(1) == 27:
break
end_time = time.time() # 记录结束时间
elapsed_time = end_time - start_time # 计算耗时
print(f"每次循环耗时:{elapsed_time:.4f}秒")
# 释放摄像头资源
for cap in caps:
cap.release()
# 关闭窗口
cv2.destroyAllWindows()
```
在这个修改后的代码示例中,我们使用`configparser`模块来读取配置文件`con.ini`中的摄像头ID。然后,我们创建了一个列表`camera_ids`来存储摄像头ID。在`while True`循环中,我们使用`for`循环读取每个摄像头的图像帧,并将它们拼接在一起进行显示。
希望这次的修改能满足你的需求。如果还有其他问题,请随时提问。
阅读全文