import cv2 # ==================== 配置区 ==================== CAMERA_INDEX = 1 # 相机索引,如果不对请用前面的探测代码找 FRAME_WIDTH = 2560 FRAME_HEIGHT = 720 TARGET_FPS = 30 # ================================================= def decode_fourcc(val): """把 get(CAP_PROP_FOURCC) 返回的浮点数转成可读的四字符代码""" val = int(val) return "".join([chr((val >> 8 * i) & 0xFF) for i in range(4)]) # 1. 打开相机,Windows 上指定 DirectShow 后端 cap = cv2.VideoCapture(CAMERA_INDEX, cv2.CAP_DSHOW) if not cap.isOpened(): print(f"无法打开相机,索引 {CAMERA_INDEX}") exit() # 2. 设置分辨率(在设置 MJPG 之前或之后都可以,但建议先设格式) cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')) cap.set(cv2.CAP_PROP_FRAME_WIDTH, FRAME_WIDTH) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, FRAME_HEIGHT) cap.set(cv2.CAP_PROP_FPS, TARGET_FPS) # 3. 读取一次,确认参数是否真的生效 ret, frame = cap.read() if not ret: print("相机已打开,但无法读取帧(可能分辨率不支持)") cap.release() exit() # 4. 打印实际生效的参数和帧格式 print("===== 相机实际参数 =====") print(f"分辨率 : {int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))} x {int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))}") print(f"帧率 : {cap.get(cv2.CAP_PROP_FPS):.1f}") print(f"FOURCC : {decode_fourcc(cap.get(cv2.CAP_PROP_FOURCC))}") print(f"帧 dtype : {frame.dtype}") print(f"帧 shape : {frame.shape} # 应为 (H, W, 3)") print("========================") # 5. 实时显示循环 while True: ret, frame = cap.read() if not ret: print("读取帧失败,退出") break cv2.imshow("USB Camera", frame) # 按 'q' 退出 if cv2.waitKey(1) & 0xFF == ord('q'): break # 6. 释放资源 cap.release() cv2.destroyAllWindows()