我正在使用Microsoft LifeCam HD 3000。 默认分辨率为640x480,但支持1280x720。
更改OpenCV分辨率的常用代码无效:
video_capture = cv2.VideoCapture(0)
print video_capture.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
print video_capture.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 720)
print video_capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
print video_capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)
输出:
True
True
640.0
480.0
请帮帮我:)。
答案 0 :(得分:1)
最后我在OpenCV源中发现了一个问题并解决了它。
MS Lifecam HD3000仅以YUY2格式工作,并且还要求提供精确的分辨率,或者只是拒绝它(有些相机只选择最接近的一个)。
我必须修改'cap_dshow.cpp'以正确的方式计算分辨率请求,对应YUY2(每像素2个字节):
原始代码[static bool setSizeAndSubtype(...)]:
//buffer size
if (mediatype == MEDIASUBTYPE_RGB24)
{
VD->pAmMediaType->lSampleSize = attemptWidth*attemptHeight*3;
}
else
{
// For compressed data, the value can be zero.
VD->pAmMediaType->lSampleSize = 0;
}
替换为
if (mediatype == MEDIASUBTYPE_RGB24) {
VD->pAmMediaType->lSampleSize = attemptWidth*attemptHeight * 3;
}
else if ((mediatype == MEDIASUBTYPE_YUY2) || (mediatype == MEDIASUBTYPE_YVYU) ||
(mediatype == MEDIASUBTYPE_UYVY)) {
VD->pAmMediaType->lSampleSize = attemptWidth*attemptHeight * 2;
}
else {
VD->pAmMediaType->lSampleSize = 0;
}
对于其他一些格式和网络摄像头,也可能会出现此问题。我将在GitHub上打开一个问题
感谢'OBS Studio'开源项目帮助找到了解决方案