前言:javacv開發包是用於支持java多媒體開發的一套開發包,能夠適用於本地多媒體(音視頻)調用以及音視頻,圖片等文件後期操做(圖片修改,音視頻解碼剪輯等等功能),這裏只使用最簡單的本地攝像頭調用來演示一下javacv的基礎功能
重要:
建議使用最新javaCV1.3版本,該版本已解決更早版本中已發現的大部分bug
javacv系列文章使用6個jar包:
javacv.jar,javacpp.jar,ffmpeg.jar,ffmpeg-系統平臺.jar,opencv.jar,opencv-系統平臺.jar。
其中ffmpeg-系統平臺.jar,opencv-系統平臺.jar中的系統平臺根據開發環境或者測試部署環境自行更改成對應的jar包,好比windows7 64位系統替換爲ffmpeg-x86-x64.jar
爲何要這樣作:由於ffmpeg-系統平臺.jar中存放的是c/c++本地so/dll庫,而ffmpeg.jar就是使用javacpp封裝的對應本地庫java接口的實現,而javacpp就是基於jni的一個功能性封裝包,方便實現jni,javacv.jar就是對9個視覺庫進行了二次封裝,可是實現的功能有限,因此建議新手先熟悉openCV和ffmpeg這兩個C/C++庫的API後再來看javaCV思路就會很清晰了。
須知:
javacv系列文章默認音視頻處理使用ffmpeg,圖像處理使用opencv,攝像頭抓取使用opencv
javacv官方github維護地址:https://github.com/bytedeco/javacv
一、使用最新的javacv1.4.4
(注意:從其餘地方下載的依賴包請積極開心的替換爲官方jar包和博主提供jar包;若是使用其餘jar包版本而致使出錯,不要急着找博主問爲啥會報錯,先把jar包替換了再試試看)
(1)使用maven添加依賴
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.4.4</version>
</dependency>
(2)使用gradle添加依賴
dependencies {
compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.4.4'
}
(3)使用本地jar包方式
最新版實在太大,須要下載全量包的請到官方github.com/bytedeco/javacv下載
javaCV1.3.3版本下載(全量包,文件名:javacv-platform-1.3.3-bin.zip,大小:212M):http://download.csdn.net/download/eguid_1/10146035
javaCV1.3版本下載:
一、javacv1.3核心包:http://download.csdn.net/detail/eguid_1/9716960(包含javacv.jar,javacpp.jar和javacv-platform.jar)
二、javacv1.3-opencv包集合:http://download.csdn.net/detail/eguid_1/9716965
三、javacv1.3-ffmpeg包集合:http://download.csdn.net/detail/eguid_1/9719323
javaCV1.3全部jar包集合:http://download.csdn.net/detail/eguid_1/9719343
javaCV1.2全部jar包集合在這裏下載:http://download.csdn.net/album/detail/3171
如下部分爲javacv1.2版本,再也不建議下載
基礎依賴包:javacv.jar;javacpp.jar(必須是1.2以上版本)
jar包使用須知:
windows x64平臺用到的opencv依賴:opencv.jar;oepncv-windows-x86_64.jar(其餘平臺替換爲對應的jar包便可)。
補充:
一、若是是蘋果mac系統,把oepncv-windows-x86_64.jar替換成這個包opencv-macosx-x86_64.jar
二、linux平臺替換成這個包:opencv-linux-x86_64.jar
三、安卓平臺替換成opencv-android-arm.jar 或者opencv-android-x86.jar
maven和gradle方式若是想要減少依賴包大小,則須要手動進行排除不須要的平臺依賴便可
二、爲何不須要安裝opencv?
從javacv0.8開始,已經不須要本地安裝opencv,直接經過引用opencv對應的系統平臺的引用包便可。
(好比oepncv-windows-x86_64.jar就是典型的64位windows環境依賴包)
三、java經過javacv獲取windows的攝像頭視頻
最終調用的攝像頭實時視頻圖像界面:
預覽本機攝像頭視頻圖像的簡單實現:
/**
* 文件名:javavcCameraTest.java
* 描述:調用windows平臺的攝像頭窗口視頻
* 修改時間:2016年6月13日
* 修改內容:
*/
package cc.eguid.javacv;
import javax.swing.JFrame;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.javacv.FrameGrabber.Exception;
import org.bytedeco.javacv.OpenCVFrameGrabber;
/**
* 調用本地攝像頭窗口視頻
* @author eguid
* @version 2016年6月13日
* @see javavcCameraTest
* @since javacv1.2
*/
public class JavavcCameraTest
{
public static void main(String[] args) throws Exception, InterruptedException
{
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.start(); //開始獲取攝像頭數據
CanvasFrame canvas = new CanvasFrame("攝像頭");//新建一個窗口
canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas.setAlwaysOnTop(true);
while(true)
{
if(!canvas.isDisplayable())
{//窗口是否關閉
grabber.stop();//中止抓取
System.exit(2);//退出
}
canvas.showImage(grabber.grab());//獲取攝像頭圖像並放到窗口上顯示, 這裏的Frame frame=grabber.grab(); frame是一幀視頻圖像
Thread.sleep(50);//50毫秒刷新一次圖像
}
}
}
java