java使用OpenCV從視頻文件中獲取幀
本文實(shí)例為大家分享了java使用OpenCV從視頻文件中獲取幀的具體代碼,供大家參考,具體內(nèi)容如下
- 實(shí)現(xiàn)功能:使用Java獲取mp4、mov、avi等視頻文件中的圖像幀,每秒獲取一幀圖像,并保存
- 環(huán)境要求:需要安裝Opencv,安裝FFmpeg,下載javacv包
- 操作系統(tǒng):本次實(shí)驗(yàn)使用的Ubuntu系統(tǒng)
實(shí)驗(yàn)代碼
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.
* 實(shí)現(xiàn)每播放一秒視頻就截取一張圖片保存到本地的操作
* 沒(méi)有使用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 是文件有錯(cuò)
*/
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庫(kù),這樣就可以用它來(lái)調(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());
//判斷視頻是否打開(kāi)
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);
//時(shí)間長(zhǎng)度
double len = frameCount / fps;
System.out.println("視頻總時(shí)長(zhǎng):"+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);
//讀取下一幀畫(huà)面
if (cap.read(frame)) {
System.out.println("正在保存");
//保存畫(huà)面到本地目錄
Highgui.imwrite("/home/fang/images/" + i + ".jpg", frame);
}
}
//關(guān)閉視頻文件
cap.release();
}
}
}
出現(xiàn)的錯(cuò)誤
解析Mp4文件時(shí),出現(xiàn):moov atom not found
以為是ffmpeg沒(méi)有安裝正確,到網(wǎng)上找解決辦法,后來(lái)發(fā)現(xiàn)是自己的視頻文件有問(wèn)題。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java將m3u8格式轉(zhuǎn)成視頻文件的方法
- java使用ffmpeg實(shí)現(xiàn)上傳視頻的轉(zhuǎn)碼提取視頻的截圖等功能(代碼操作)
- java使用ffmpeg處理視頻的方法
- 使用Java和ffmpeg把音頻和視頻合成視頻的操作方法
- java使用FFmpeg合成視頻和音頻并獲取視頻中的音頻等操作(實(shí)例代碼詳解)
- Java 使用 FFmpeg 處理視頻文件示例代碼詳解
- Java解碼H264格式視頻流中的圖片
- JavaCV獲取視頻文件時(shí)長(zhǎng)的方法
- Java使用OpenCV3.2實(shí)現(xiàn)視頻讀取與播放
- JavaCV實(shí)現(xiàn)獲取視頻每幀并保存
- Java獲取視頻時(shí)長(zhǎng)及截取幀截圖詳解
- Java獲取視頻時(shí)長(zhǎng)、大小的示例
相關(guān)文章
Spring?Boot?實(shí)現(xiàn)字段唯一校驗(yàn)功能(實(shí)例代碼)
這篇文章主要介紹了Spring?Boot?實(shí)現(xiàn)字段唯一校驗(yàn),實(shí)現(xiàn)代碼很簡(jiǎn)單,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
官方詳解HDFS?Balancer工具主要調(diào)優(yōu)參數(shù)
這篇文章主要為大家介紹了HDFS?Balancer工具主要調(diào)優(yōu)參數(shù)的?官方詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
mybatis中關(guān)于in的使用方法及說(shuō)明
這篇文章主要介紹了mybatis中關(guān)于in的使用方法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Java調(diào)用參數(shù)類型是application/x-www-form-urlencoded的API問(wèn)題
在使用Postman進(jìn)行接口測(cè)試時(shí),對(duì)于POST請(qǐng)求,需將請(qǐng)求頭設(shè)置為application/x-www-form-urlencoded,并將參數(shù)轉(zhuǎn)為String類型,通常在GET請(qǐng)求中,參數(shù)直接拼接在URL后,本文通過(guò)具體實(shí)例,詳細(xì)講解了參數(shù)處理的方法,適合API開(kāi)發(fā)者參考2024-09-09
一文帶你探究Spring中Bean的線程安全性問(wèn)題
很多人都想spring中的bean是線程安全的嗎?本文將帶你探究Spring中Bean的線程安全性問(wèn)題,感興趣的同學(xué)可以參考閱讀下2023-05-05
Java使用Arrays.asList報(bào)UnsupportedOperationException的解決
這篇文章主要介紹了Java使用Arrays.asList報(bào)UnsupportedOperationException的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

