首先要引入javaCV的Maven依賴
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.4.3</version>
</dependency>
在引入該依賴後javaCV會加載相應平臺的jar包,打開相應平臺的jar包可以看到其中包含相應的dll文件。
package com.wxj233.bean;
import org.bytedeco.javacv.FrameGrabber.Exception;
import org.bytedeco.javacv.OpenCVFrameGrabber;
/**
* @version 0.0.1
* @since 2018/12/18
* @author wxj233
* 攝像頭參數設置
*/
public class Camera {
/**
* 是否存儲圖片
* @author wxj233
*/
public static enum Img{
save,
nosave
}
/**
* 是否正常啓動攝像頭 true:正常啓動/false:異常啓動
*/
public static boolean InitCamera;
/**
* 攝像頭資源
*/
public static OpenCVFrameGrabber grabber;
/**
* 是否保存圖片,默認不保存
*/
public static Img saveImage = Img.nosave;
/**
* 開始攝像頭
* @throws Exception 攝像頭初始化失敗!
*/
public static void StartCamera() throws Exception {
grabber.start();
}
/**
* 停止攝像頭
* @throws Exception 攝像頭關閉異常!
*/
public static void StopCamera() throws Exception {
grabber.stop();
}
}
package com.wxj233.System.init;
import javax.annotation.PostConstruct;
import org.bytedeco.javacv.FrameGrabber.Exception;
import org.bytedeco.javacv.OpenCVFrameGrabber;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.wxj233.bean.Camera;
import com.wxj233.serviceImp.SyLogServiceImp;
/**
* @version 0.0.1
* @since 2018/12/18
* @author wxj233
*
*/
@Component
public class CameraTimerInit {
@Autowired
SyLogServiceImp syLogService;
/**
* 初始化攝像頭
*/
@PostConstruct
void CameraInit(){
Camera.grabber = new OpenCVFrameGrabber(0);
try {
Camera.StartCamera();
Camera.InitCamera = true; //攝像頭正常啓動
syLogService.info(CameraTimerInit.class, "初始化攝像頭!");
} catch (Exception e) {
// TODO Auto-generated catch block
Camera.InitCamera = false; //攝像頭啓動失敗
syLogService.info(CameraTimerInit.class, "請檢查攝像頭是否正常或驅動是否更新!");
//e.printStackTrace();
}
}
}
package com.wxj233.Timer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicLong;
import org.bytedeco.javacpp.opencv_core.Mat;
import org.bytedeco.javacpp.opencv_imgcodecs;
import org.bytedeco.javacv.FrameGrabber.Exception;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.javacv.OpenCVFrameGrabber;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.wxj233.bean.Camera;
import com.wxj233.util.SystemUtilServiceImp;
/**
* @version 0.0.1
* @since 2018/12/18
* @author wxj233
* 開啓攝像頭抓拍
*/
@Component
public class CameraTimer {
@Autowired
SystemUtilServiceImp systemUtilService;
//原子類產生不重複數據
AtomicLong generator = new AtomicLong();
public static OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
@Scheduled(cron = "0/5 * * * * ?")
public void getPhoto() {
//System.out.println("抓拍!");
OpenCVFrameGrabber grabber = Camera.grabber;
try {
if(Camera.InitCamera) {
Mat mat = converter.convertToMat(grabber.grabFrame());
if(Camera.saveImage == Camera.Img.save) {
//SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日HH時mm分ss秒");javaCV不支持中文路徑
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date();
String imgname = format.format(date) + "Num" + String.valueOf(generator.incrementAndGet());
opencv_imgcodecs.imwrite(systemUtilService.getWebPath("/WEB-INF/CameraPhoto/") + imgname +".jpg", mat);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
相關鏈接:
javacv開發詳解之1:調用本機攝像頭視頻(建議使用javaCV最新版本)
javacv實現人臉檢測
JAVA中通過JavaCV實現跨平臺視頻/圖像處理-調用攝像頭
javaCV下載鏈接:https://www.softpedia.com/get/Programming/Other-Programming-Files/JavaCV.shtml