javacv開發(fā)詳解之調(diào)用本機(jī)攝像頭視頻
javacv開發(fā)包是用于支持java多媒體開發(fā)的一套開發(fā)包,可以適用于本地多媒體(音視頻)調(diào)用以及音視頻,圖片等文件后期操作(圖片修改,音視頻解碼剪輯等等功能),這里只使用最簡(jiǎn)單的本地?cái)z像頭調(diào)用來演示一下javacv的基礎(chǔ)功能
重要:
建議使用最新javaCV1.5版本,該版本已解決更早版本中已發(fā)現(xiàn)的大部分bug
javacv系列文章使用6個(gè)jar包:
javacv.jar,javacpp.jar,ffmpeg.jar,ffmpeg-系統(tǒng)平臺(tái).jar,opencv.jar,opencv-系統(tǒng)平臺(tái).jar。
其中ffmpeg-系統(tǒng)平臺(tái).jar,opencv-系統(tǒng)平臺(tái).jar中的系統(tǒng)平臺(tái)根據(jù)開發(fā)環(huán)境或者測(cè)試部署環(huán)境自行更改為對(duì)應(yīng)的jar包,比如windows7 64位系統(tǒng)替換為ffmpeg-x86-x64.jar
為什么要這樣做:因?yàn)閒fmpeg-系統(tǒng)平臺(tái).jar中存放的是c/c++本地so/dll庫,而ffmpeg.jar就是使用javacpp封裝的對(duì)應(yīng)本地庫java接口的實(shí)現(xiàn),而javacpp就是基于jni的一個(gè)功能性封裝包,方便實(shí)現(xiàn)jni,javacv.jar就是對(duì)9個(gè)視覺庫進(jìn)行了二次封裝,但是實(shí)現(xiàn)的功能有限,所以建議新手先熟悉openCV和ffmpeg這兩個(gè)C/C++庫的API后再來看javaCV思路就會(huì)很清晰了。
須知:
javacv系列文章默認(rèn)音視頻處理使用ffmpeg,圖像處理使用opencv,攝像頭抓取使用opencv
javacv官方github維護(hù)地址:https://github.com/bytedeco/javacv
依賴配置說明(注意:從其他地方下載的依賴包請(qǐng)積極開心的替換為官方j(luò)ar包和博主提供jar包;如果使用其他jar包版本而導(dǎo)致出錯(cuò),不要急著找博主問為啥會(huì)報(bào)錯(cuò),先把jar包替換了再試試看)
maven和gradle方式如果想要減小依賴包大小,則需要手動(dòng)進(jìn)行排除不需要的平臺(tái)依賴即可
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包方式
最新版實(shí)在太大,需要下載全量包的請(qǐng)到官方github.com/bytedeco/javacv下載
建議使用maven或gradle方式構(gòu)建項(xiàng)目。
jar包使用須知:
1、windows x64平臺(tái)用到的opencv依賴:opencv.jar;oepncv-windows-x86_64.jar(其他平臺(tái)替換為對(duì)應(yīng)的jar包即可)
2、蘋果mac需要opencv-macosx-x86_64.jar3、linux平臺(tái)需要:opencv-linux-x86_64.jar
4、安卓平臺(tái)arm架構(gòu)的需要opencv-android-arm.jar ,基于x86的需要opencv-android-x86.jar
為什么不需要安裝opencv?從javacv0.8開始,已經(jīng)不需要本地安裝opencv,直接通過引用opencv對(duì)應(yīng)的系統(tǒng)平臺(tái)的引用包即可。
(比如oepncv-windows-x86_64.jar就是典型的64位windows環(huán)境依賴包)
獲取攝像頭視頻最終調(diào)用的攝像頭實(shí)時(shí)視頻圖像界面:
預(yù)覽本機(jī)攝像頭視頻圖像的簡(jiǎn)單實(shí)現(xiàn)(由于之前csdn的注釋被屏蔽,重新精簡(jiǎn)優(yōu)化了代碼):
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; /** * 調(diào)用本地?cái)z像頭窗口視頻 * @author eguid * @date 2016年6月13日 * @since javacv1.2 */public class JavavcCameraTest{ public static void main(String[] args) throws Exception, InterruptedException{ OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);//新建opencv抓取器,一般的電腦和移動(dòng)端設(shè)備中攝像頭默認(rèn)序號(hào)是0,不排除其他情況 grabber.start();//開始獲取攝像頭數(shù)據(jù) CanvasFrame canvas = new CanvasFrame('攝像頭預(yù)覽');//新建一個(gè)預(yù)覽窗口 canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //窗口是否關(guān)閉 while(canvas.isDisplayable()){ /*獲取攝像頭圖像并在窗口中顯示,這里Frame frame=grabber.grab()得到是解碼后的視頻圖像*/ canvas.showImage(grabber.grab()); } grabber.close();//停止抓取 }}
是不是很簡(jiǎn)單,原本很復(fù)雜的流媒體操作,javaCV能夠幫助我們快速實(shí)現(xiàn)。
以上就是javacv開發(fā)詳解之調(diào)用本機(jī)攝像頭視頻的詳細(xì)內(nèi)容,更多關(guān)于javacv調(diào)用本機(jī)攝像頭的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向2. Nginx+php配置文件及原理解析3. Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼4. windows服務(wù)器使用IIS時(shí)thinkphp搜索中文無效問題5. JSP數(shù)據(jù)交互實(shí)現(xiàn)過程解析6. 淺談python出錯(cuò)時(shí)traceback的解讀7. .NET中l(wèi)ambda表達(dá)式合并問題及解決方法8. python matplotlib:plt.scatter() 大小和顏色參數(shù)詳解9. Ajax實(shí)現(xiàn)表格中信息不刷新頁面進(jìn)行更新數(shù)據(jù)10. 利用promise及參數(shù)解構(gòu)封裝ajax請(qǐng)求的方法
