java使用OpenCV從視頻文件中獲取幀
更新時間:2019年07月23日 17:21:27 作者:Fang20160214
這篇文章主要為大家詳細介紹了java使用OpenCV從視頻文件中獲取幀,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了java使用OpenCV從視頻文件中獲取幀的具體代碼,供大家參考,具體內(nèi)容如下
- 實現(xiàn)功能:使用Java獲取mp4、mov、avi等視頻文件中的圖像幀,每秒獲取一幀圖像,并保存
- 環(huán)境要求:需要安裝Opencv,安裝FFmpeg,下載javacv包
- 操作系統(tǒng):本次實驗使用的Ubuntu系統(tǒng)
實驗代碼
import com.googlecode.javacv.cpp.opencv_highgui; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.highgui.Highgui; import org.opencv.highgui.VideoCapture; /** * Created by fang on 17-4-6. * 實現(xiàn)每播放一秒視頻就截取一張圖片保存到本地的操作 * 沒有使用ffmpeg,則只能讀取avi格式視頻 * 下載google javcv.jar * sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next * sudo apt-get update * sudo apt-get install ffmpeg * /home/fang/BigDataSoft/opencv-2.4.13/3rdparty/ffmpeg中有opencv_ffmpeg_64.dll文件 * 不能解析視頻,提示moov atom not found 是文件有錯 */ public class GetFrameFormVideo { public static void main(String[] args) { // System.out.println("Welcome to OpenCV " + Core.VERSION); // System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // Mat m = Mat.eye(3, 3, CvType.CV_8UC1); // System.out.println("m = " + m.dump()); //加載本地的OpenCV庫,這樣就可以用它來調(diào)用Java API System.loadLibrary(Core.NATIVE_LIBRARY_NAME); run2(); } public static void run2() { //讀取視頻文件 VideoCapture cap = new VideoCapture("/home/fang/Downloads/src_11.mp4"); System.out.println(cap.isOpened()); //判斷視頻是否打開 if (cap.isOpened()) { //總幀數(shù) double frameCount = cap.get(opencv_highgui.CV_CAP_PROP_FRAME_COUNT); System.out.println("視頻總幀數(shù):"+frameCount); //幀率 double fps = cap.get(opencv_highgui.CV_CAP_PROP_FPS); System.out.println("視頻幀率"+fps); //時間長度 double len = frameCount / fps; System.out.println("視頻總時長:"+len); Double d_s = new Double(len); System.out.println(d_s.intValue()); Mat frame = new Mat(); for (int i = 0; i < d_s.intValue(); i++) { //設(shè)置視頻的位置(單位:毫秒) cap.set(opencv_highgui.CV_CAP_PROP_POS_MSEC, i * 1000); //讀取下一幀畫面 if (cap.read(frame)) { System.out.println("正在保存"); //保存畫面到本地目錄 Highgui.imwrite("/home/fang/images/" + i + ".jpg", frame); } } //關(guān)閉視頻文件 cap.release(); } } }
出現(xiàn)的錯誤
解析Mp4文件時,出現(xiàn):moov atom not found
以為是ffmpeg沒有安裝正確,到網(wǎng)上找解決辦法,后來發(fā)現(xiàn)是自己的視頻文件有問題。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- java將m3u8格式轉(zhuǎn)成視頻文件的方法
- java使用ffmpeg實現(xiàn)上傳視頻的轉(zhuǎn)碼提取視頻的截圖等功能(代碼操作)
- java使用ffmpeg處理視頻的方法
- 使用Java和ffmpeg把音頻和視頻合成視頻的操作方法
- java使用FFmpeg合成視頻和音頻并獲取視頻中的音頻等操作(實例代碼詳解)
- Java 使用 FFmpeg 處理視頻文件示例代碼詳解
- Java解碼H264格式視頻流中的圖片
- JavaCV獲取視頻文件時長的方法
- Java使用OpenCV3.2實現(xiàn)視頻讀取與播放
- JavaCV實現(xiàn)獲取視頻每幀并保存
- Java獲取視頻時長及截取幀截圖詳解
- Java獲取視頻時長、大小的示例
相關(guān)文章
Java中的遞歸詳解(用遞歸實現(xiàn)99乘法表來講解)
這篇文章主要介紹了Java中的遞歸詳解(用遞歸實現(xiàn)99乘法表來講解),本文給出了普通的99乘法實現(xiàn)方法和用遞歸實現(xiàn)的方法,并對比它們的不同,體現(xiàn)出遞歸的運用及理解,需要的朋友可以參考下2015-03-03Redis 集成Spring的示例代碼(spring-data-redis)
本篇文章主要介紹了Redis 集成Spring的示例代碼(spring-data-redis) ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09