簡體   English   中英

無法更改 OpenCV 視頻捕獲分辨率

[英]Can't change OpenCV video capture resolution

我遇到的問題是我無法更改 OpenCV 視頻捕獲的分辨率。 無論如何,分辨率始終為 640x480。 我使用的代碼是用 C++ 編寫的,我使用的是 opencv 3.4.8。 我已經創建了一個超級簡單的程序來執行此操作,但無論我嘗試什么,它似乎都不起作用。

這是完整的代碼:

#include "opencv2/opencv.hpp"
using namespace cv;
int main(int argc, char** argv)
{
    VideoCapture cap(0);
    cap.set(CAP_PROP_FRAME_HEIGHT, 1080);
    cap.set(CAP_PROP_FRAME_WIDTH, 1920);


    // open the default camera, use something different from 0 otherwise;
    // Check VideoCapture documentation.
    if (!cap.open(0))
        return 0;
    for (;;)
    {
        Mat frame;
        cap.read(frame);
        if (frame.empty()) break; // end of video stream
        imshow("this is you, smile! :)", frame);
        if (waitKey(10) == 27) break; // stop capturing by pressing ESC 
    }
    // the camera will be closed automatically upon exit
    // cap.close();
    return 0;
}

當我運行上面的代碼框架時,總是 640x480。

我嘗試使用cap.set()將分辨率更改為更小和更高的分辨率。 我正在使用 ImageSource 相機,並且我知道我嘗試使用的分辨率受相機支持,並且我可以在另一個程序中以這些分辨率查看視頻。

我試過使用不同的相機/網絡攝像頭。

我嘗試在創建VideoCapture對象時顯式更改后端 API - 即VideoCapture cap(0, CAP_DSHOW) 我嘗試了DSHOWFFMPEGIMAGES等。

我試過在不同的計算機上運行相同的程序。

結果始終是相同的 640x480 分辨率。

我缺少一些簡單的東西嗎? 我似乎可以在 SO 上找到的所有其他帖子都指向使用cap.set()來更改寬度和高度。

這取決於您的相機后端是什么。 正如文檔所說:

每個后端都以不同的方式支持設備屬性 (cv::VideoCaptureProperties),或者可能根本不支持任何屬性。

文檔中還提到:

讀/寫屬性涉及很多層。 沿着這條鏈可能會發生一些意想不到的結果。 有效行為取決於設備硬件、驅動程序和 API 后端

OpenCV 視頻 I/O 模塊似乎不支持您的相機后端。

注意:我也遇到過這樣的相機,其中一些不同的分辨率正在使用不同的數字。 例如,您可以通過嘗試VideoCaptur(-1)VideoCapture(1)VideoCapture(2) ...

結果發現錯誤出在“if(!cap.open(0))”行中,我試圖用它來檢查 cap 是否已成功初始化。

我的印象是,如果視頻捕獲對象是打開的,則 open 只是返回 true,否則返回 false。 但如果它已經打開,它實際上會釋放視頻捕獲對象,然后它會重新打開它。

長話短說,這意味着當使用 cap.open(0) 重新打開對象時,我用來更改分辨率的 cap.set() 調用將被刪除。 此時分辨率被設置回默認的 640x480。

我正在尋找的方法是 cap.isOpened(),如果對象處於打開狀態,它只會返回 true 或 false。 一個簡單而愚蠢的錯誤。

暫無
暫無

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

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