OpenCVsharp4 以最大分辨率保存图像

OpenCVsharp4 save Image at max resolution

我正在使用 shimat 的 Opencvsharp 构建应用程序。代码只是打开相机,保存图像并使用下面的代码关闭它。

using OpenCvSharp;

VideoCapture capture;
Mat frame;

private void btn_Camera_Click(object sender, EventArgs e)
{

    capture = new VideoCapture();          
    frame = new Mat();
    capture.Open(1);
    capture.Read(frame);

    if (capture.Read(frame))
    {
        frame.SaveImage("@test.jpg");
    }

    capture.Release();
}

然而,图片以 640x480 分辨率保存,而相机能够拍摄 1280x720 分辨率的图片。 我尝试设置 VideoCapture 属性,如下所示

capture.Set(VideoCaptureProperties.FrameHeight, 720);
capture.Set(VideoCaptureProperties.FrameWidth, 1280);

但保存的图像仍然是 480p 分辨率。有没有办法以 720p 分辨率保存它,就像默认的 windows 相机应用程序一样。

此外,我不想将其保存为 480p,然后将其调整为 720p,因为这无助于获取需要捕获的细节。

我知道在 opencv 中 Python 它是可能的。我正在使用 Opencvsharp4

在 C# 中寻找类似的东西

通过 OpenCvSharp 捕获时,640x480 是默认分辨率。

您必须在打开设备之前设置所需的分辨率(这在您抓取帧时隐式完成)例如:

    int frameWidth = 1280;
    int frameHeight = 720;
    int cameraDeviceId = 1;
    var videoCapture = VideoCapture.FromCamera(cameraDeviceId);
    if (!videoCapture.Set(VideoCaptureProperties.FrameWidth, frameWidth))
    {
        logger.LogWarning($"Failed to set FrameWidth to {frameWidth}");
    }
    if (!videoCapture.Set(VideoCaptureProperties.FrameHeight, frameHeight))
    {
        logger.LogWarning($"Failed to set FrameHeight to {frameHeight}");
    }
    using (videoCapture)
    {
        videoCapture.Grab();
        var image = videoCapture.RetrieveMat();
        logger.LogInformation($"Image size [{image.Width} x {image.Height}]");
    }