Python与MATLAB调用同一摄像头捕获图像尺寸差异原因咨询
为什么Python和MATLAB捕获的摄像头图像尺寸不同?
我之前也碰到过类似的情况,核心原因其实是两个平台调用摄像头时默认使用的分辨率参数不一致,具体可以从这几个方面拆解:
库的默认配置差异
Python中常用的摄像头捕获库是OpenCV的cv2.VideoCapture,它初始化时默认会优先选择摄像头支持的较低分辨率档位(比如很多USB摄像头的默认低档位就是480×640,对应你的(480, 640, 3)输出);而MATLAB的webcam或videoinput函数,默认会调用摄像头的高分辨率预设档(比如720×1280的720p规格,对应你的(720, 1280, 3)输出)。摄像头的多分辨率档位支持
几乎所有USB摄像头都支持多个分辨率档位(比如480p、720p、1080p等),不同库在初始化时的档位选择逻辑不同。你可以通过手动指定分辨率来验证这一点:在Python(OpenCV)中手动设置720p分辨率:
import cv2 # 初始化摄像头设备(0代表默认摄像头) cap = cv2.VideoCapture(0) # 设置宽度为1280,高度为720 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) ret, frame = cap.read() print("图像尺寸:", frame.shape) # 此时应该输出(720, 1280, 3) cap.release()在MATLAB中手动设置480p分辨率:
% 先查看可用摄像头 webcamlist % 初始化并指定分辨率 cam = webcam('你的摄像头名称'); cam.Resolution = '640x480'; frame = snapshot(cam); disp("图像尺寸:"); size(frame) % 此时应该输出480 640 3 clear cam;特殊情况:格式转换或裁剪
极少数情况下,库可能会对捕获的图像做默认的格式转换或裁剪,但这种情况非常少见,绝大多数场景下都是默认分辨率档位的问题。
简单来说,就是两个工具默认“偏好”的摄像头分辨率不一样,手动指定统一的分辨率就能得到尺寸一致的图像啦。
内容的提问来源于stack exchange,提问作者Laveena
相关产品推荐
相关产品推荐

