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



我目前正在进行的项目要求我在处理之前捕获图像。我使用的是logitech c270网络摄像头,有很多可用的分辨率供我选择。然而,没有一个可用的分辨率与我的情况相匹配,因为我想只捕捉正方形的图像,但我的网络摄像头支持的分辨率都不是正方形,而且都是矩形。

例如,我想拍摄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)。

注意:这在Matlab R2011a中进行了测试。