程式碼來源。
專案開發工具為 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) {
}
}
}
執行結果 ,其實我的膚色比較接近黑色~_~。



沒有留言:
張貼留言