簡體   English   中英

使用Python中的OpenCV無法更改網絡攝像頭分辨率(Windows)

[英]Can't change webcam resolution with OpenCV in Python (Windows)

我使用的是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
  • 在像OBS studio這樣的不同軟件中,網絡攝像頭可輕松配置為1280x720。
  • 還試過任何支持的分辨率,但結果是一樣的
  • 在請求高分辨率之前將FPS更改為較低也不起作用

請幫我:)

最后我在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”開源項目,該項目有助於找到解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM