Matlab 将网络摄像头分辨率更改为不可用分辨率

Matlab change webcam resolution to unavailable resolution

我目前正在进行的项目要求我在处理图像之前捕获图像。我使用的是 logitech c270 网络摄像头,有多种分辨率供我选择。但是,none 的可用分辨率符合我的情况,因为我只想捕获正方形图像,但 none 我的网络摄像头支持的分辨率是正方形,而且它们都是矩形。

例如,我想拍摄一张 640x640 的图像(正方形),但我的网络摄像头只能拍摄矩形图像(分辨率为矩形)。

我无法更改摄像头支持的分辨率,请问有什么办法可以在预览时设置摄像头的区域吗?假设我在 matlab 中将默认网络摄像头分辨率设置为 960x720,但是当我向用户预览网络摄像头时,我从侧面裁剪掉了额外的像素,只显示 640x640?

我知道我可以在拍摄图像(在本例中为人脸)后稍后裁剪图像,但是,稍后裁剪图像可能会导致脸部消失正方形区域,或大于正方形区域。我只希望这个人从网络摄像头将自己定位在方形区域。有什么方法可以在 matlab 中手动设置我的网络摄像头来执行此操作吗?

打开视频对象后在 Matlab 中说 vid例如

vid = videoinput('winvideo', 1, 'YUY2_960x720');

执行以下操作:

startx = 161; % horizontal starting index
starty = 41; % vertical starting index
width = 640;
height = 640;
uddobj = imaqgate('privateGetField', vid, 'uddobject');
set(uddobj, 'ROIPosition', [startx, starty, width, height]);
preview(vid);

用于根据 Matlab 索引符号获取区域的 ROI (41:680,161:800)。

N.B。这是在 Matlab R2011a 中测试的。