首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaCV 設定攝像頭解析度:使用 FrameGrabber.setImageWidth/Height

     編輯:程式設計綜合問答

問題

JavaCV (OpenCVFrameGrabber) 預設抓取低解析度畫面,導致拍照畫質差(僅 55KB)。

解決方法

在 start() 前呼叫 setImageWidth / setImageHeight:

import org.bytedeco.javacv.*;
import org.bytedeco.opencv.opencv_core.*;

public class WebcamCapture {
    public static void main(String[] args) throws Exception {
        int deviceIndex = 0;
        int width  = 1920; // 目標寬度
        int height = 1080; // 目標高度

        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(deviceIndex);
        grabber.setImageWidth(width);
        grabber.setImageHeight(height);
        grabber.start(); // 必須在 start 前設定

        Frame frame = grabber.grab();
        if (frame != null) {
            Java2DFrameConverter converter = new Java2DFrameConverter();
            BufferedImage img = converter.getBufferedImage(frame);
            javax.imageio.ImageIO.write(img, "jpg", new java.io.File("photo.jpg"));
            System.out.println("解析度: " + img.getWidth() + "x" + img.getHeight());
        }
        grabber.stop();
        grabber.close();
    }
}

注意事項

  • 並非所有攝像頭支援任意解析度,設定後請檢查實際 grabber.getImageWidth() 是否生效。
  • 部分 USB 攝像頭需安裝廠商驅動才能啟用高解析度模式。
  • 若使用 FFmpegFrameGrabber,同樣支援 setImageWidth/Height。
  • JavaCV 1.5+ 建議使用 FrameGrabber.createDefault(deviceIndex) 自動選擇後端。

參考官方範例

WebcamAndMicrophoneCapture.java 展示完整參數設定與多執行緒擷取。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved