1. java 如何將多張JPG圖片合成視頻文件,比如:avi格式 或 mpg格式.
之前有做過圖片合成視頻的功能,大概代碼就是這樣,你可以看一下
/**
* 圖片合成視頻
* @param mp4SavePath 視頻保存路徑
* @param imageDir 圖片地址
* @param rate 這個可以理解成視頻每秒播放圖片的數量
*/
public static boolean jpgToMp4(String mp4SavePath, String imageDir, double rate) {
FFmpegFrameRecorder recorder = null;
boolean flag = true;
try {
File[] files = FileUtils.fileSort(imageDir);
int [] widthArray = new int[files.length];
int [] heightArray = new int[files.length];
/**
* 獲取合成視頻圖片的最大寬高,避免圖片比例不一致最終合成效果差
*/
for (int i = 0; i < files.length; i++) {
BufferedImage bufferedImage = ImageIO.read(files[i]);
widthArray[i] = bufferedImage.getWidth();
heightArray[i] = bufferedImage.getHeight();
}
/**
* 這個方法主要是防止圖片比例達不到視頻合成比例的要求,如果達不到下面條件視頻則會無法播放
* 圖片寬:必須要被32整除
* 圖片高:必須要被2整除
*/
int [] maxWH = getImgMaxWH(widthArray,heightArray);
recorder = new FFmpegFrameRecorder(mp4SavePath,maxWH[0],maxWH[1]);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
/**
* 視頻質量:目前測試出來的是25-30最清晰,視頻質量范圍好像是0-40,具體可以自己慢慢測
*/
recorder.setVideoQuality(25);
recorder.setFormat("mp4");
recorder.setFrameRate(rate > 0 ? rate : 1);
recorder.setPixelFormat(0);
recorder.start();
OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();
/**
* 合成視頻
*/
for(int i = 0; i < files.length; i++ ){
opencv_core.IplImage image = cvLoadImage(files[i].getPath());
recorder.record(conveter.convert(image));
opencv_core.cvReleaseImage(image);
}
logger.info("合成成功");
} catch(Exception e) {
e.printStackTrace();
flag = false;
logger.error("合成失敗");
} finally {
try {
if (recorder != null){
recorder.stop();
recorder.release();
}
} catch (FrameRecorder.Exception e) {
e.printStackTrace();
}
}
return flag;
}
2. 除了python之外,你還應該來了解一下java的圖像處理和人臉識別庫:javacv
javacv技術棧究竟有何作用?
大家對於javacv充滿好奇,恰巧博主對javacv有所研究,以下就來為各位介紹javacv的功能及其在各個領域的優勢。
javacv不僅能處理圖像,其強大的跨平台性和快速開發能力使其在Windows、Mac、Linux、樹莓派嵌入式等多種平台上都能輕松應對圖像處理、人臉檢測識別、字元識別、音視頻流媒體、樹莓派(嵌入式)和深度學習等領域。
圖像處理與識別
在圖像處理與識別方面,javacv通過jni技術實現了opencv圖像檢測識別和tesseract字元識別的跨平台使用,無需再次封裝。
其他方面,如矩陣計算和深度學習,了解不多,不再贅述。
音視頻處理(ffmpeg)
在音視頻處理方面,javacv支持ffmpeg的編解碼、裝封裝等功能,兩者並無太大差異。
嵌入式開發(樹莓派等):
許多人在樹莓派等基於arm晶元的板子上使用javacv,通過外接攝像頭或音頻設備即可實現音視頻上傳、圖像處理、圖像識別等功能。
應用場景廣泛,包括各種圖像採集設備、機器人視覺、人臉打卡和小區門禁等領域。
音視頻流媒體:
利用javacv的流媒體優勢,可實現音視頻採集、推流、編解碼、裝封裝等操作。
深度學習:
deeplearn4j為主的java深度學習框架,在深度學習領域具有一定知名度。
人臉檢測識別:
關於人臉檢測識別的文章在網路上頗為常見,javacv官網的首頁demo也展示了人臉檢測的實例,其功能與opencv相當。
文字識別:
通過Tesseract-OCR可輕松實現字元庫訓練、字元識別。同時,javacv的流媒體屬性和嵌入式開發特性也支持攝像頭的字元識別和視頻圖像的字元識別等場景。
javacv技術棧的應用場景
很多人好奇,javacv在哪些應用場景下得到廣泛應用?
javacv具備跨平台特性,可在Windows、Linux、macOS等伺服器或客戶端機器上運行,並在各種嵌入式板上也能良好工作。
3. java用rtps轉換成mat
實現解碼或者強制轉換。
首先,我們來到opencv的官網選擇自己需要下載的平台及版本,因為要和公司演算法做兼容,window下安裝配置極其簡單,將下載得到的exe文件解壓縮,然後將到opencvbuild java下即可得到需要的jar包,再然後將jar包轉換為maven庫里的依賴就可以,引入了pom依賴之後,windows下還需要dll文件,然後重新配置文件就可以完成強制轉換。