JavaCV サンプルプログラム

目次

カメラ映像を表示する


import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.OpenCVFrameGrabber;

/**
 * カメラから映像をWindowに表示する.
 *
 * @author uchicom: Shigeki Uchiyama
 *
 */
public class Sample1 {

	/**
	 * サンプルを実行する.
	 *
	 * @param args
	 */
	public static void main(String[] args) {
		Sample1 sample = new Sample1();
		sample.execute();
	}

	/** 画像表示スレッド死活状態 */
	private boolean alive = true;

	/**
	 * メイン処理.
	 */
	private void execute() {
		CanvasFrame canvas = new CanvasFrame("カメラ");
		// 画面を閉じたら画像表示スレッドを停止して、画面リソースを開放
		canvas.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent we) {
				alive = false;
				canvas.dispose();
			}
		});

		// カメラの取得
		OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);

		// 画像取得表示スレッド
		Thread thread = new Thread(() -> {

			try {
				// 開始
				grabber.start();
				while (alive) {
					// 画像取得
					Frame image = grabber.grab();

					// 画像表示
					if (image != null) {
						canvas.showImage(image);
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					// 終了
					grabber.stop();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
		// スレッド開始
		thread.start();
	}
}