程式碼來源。
專案開發工具為 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 有興趣的,可以參考這個網頁。
執行結果
執行結果
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) { } } }
執行結果 ,其實我的膚色比較接近黑色~_~。
沒有留言:
張貼留言