2015年1月27日 星期二

[Java]JavaCV 開啟webcam

用JavaCV開啟WebCam 感覺也很直覺,不多說,插上WebCam直Run,

程式碼來源


專案開發工具為 Netbeans IDE 8.0.1 ,先來看看整個專案。














很簡單,就只有一個Java程式,以及引入了3個JavaCV內的JAR檔。

接下來我們看程式碼,俺己經把註解中文化了。



package javacv2;
import org.bytedeco.javacpp.opencv_core.IplImage;
import static org.bytedeco.javacpp.opencv_core.cvFlip;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.OpenCVFrameGrabber;

public class JavaCV2 {

    public static void main(String args[]) {
        //New 一個CanvasFrame ,就把它當作是一個JFrame用。
        CanvasFrame canvas = new CanvasFrame("Webcam");
        //設定這一個JFrame關閉時順便把程式結束。
        canvas.setDefaultCloseOperation(
                javax.swing.JFrame.EXIT_ON_CLOSE);
        //用 FrameGrabber 取得 得webcam
        FrameGrabber grabber = new OpenCVFrameGrabber("");

        try {
            //開始取得畫面
            grabber.start();

            //定義一個IplImage 存放取出來的影像
            IplImage img;

            while (true) {

                //把影像放入IplImage
                img = grabber.grab();

                //設定顯示用的CanvasFrame為取出的影像大小
                canvas.setCanvasSize(grabber.getImageWidth(), 
                        grabber.getImageHeight());

                if (img != null) {
                    //水平翻轉圖片,直接取進來的圖片(可能)會鏡向。
                    cvFlip(img, img, 1);
                    //顯示圖片
                    canvas.showImage(img);
                }
            }
        } catch (Exception e) {
        }
    }

}



如果對CanvasFrame 有興趣的,可以參考這個網頁

執行結果



















執行結果 cvFlip(img, img, 1);




















其實門應該在我的右手邊,所以其實我並不需要加cvFlip(img, img, 1);  ,但各家的

WebCam硬體設計不同,可能還是要試試看,我使用的是羅技C 170。而方向的定義是要由

webcam定義,或是自己對面的方向,可能視情況而定。

最後,你會發現一件事,影像怎麼好像都很雪白,有一個方式可以修正一下Gamma值。

程式只要改2行





package javacv2;
import org.bytedeco.javacpp.opencv_core.IplImage;
import static org.bytedeco.javacpp.opencv_core.cvFlip;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.OpenCVFrameGrabber;

public class JavaCV2 {

    public static void main(String args[]) {
        
         //用 FrameGrabber 取得 得webcam
        FrameGrabber grabber = new OpenCVFrameGrabber("");
        
        //宣告一個CanvasFrame ,就把它當作是一個JFrame用。
        CanvasFrame canvas = new CanvasFrame("Webcam",CanvasFrame.getDefaultGamma()/grabber.getGamma());
        //設定這一個JFrame關閉時順便把程式結束。
        canvas.setDefaultCloseOperation(
                javax.swing.JFrame.EXIT_ON_CLOSE);
       

        try {
            //開始取得畫面
            grabber.start();

            //定義一個IplImage 存放取出來的影像
            IplImage img;

            while (true) {

                //把影像放入IplImage
                img = grabber.grab();

                //設定顯示用的CanvasFrame為取出的影像大小
                canvas.setCanvasSize(grabber.getImageWidth(), 
                        grabber.getImageHeight());

                if (img != null) {
                    //水平翻轉圖片,直接取進來的圖片(可能)會鏡向。
                    cvFlip(img, img, 1);
                    //顯示圖片
                    canvas.showImage(img);
                }
            }
        } catch (Exception e) {
        }
    }

}


執行結果 ,其實我的膚色比較接近黑色~_~。

沒有留言:

張貼留言