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文件,然后重新配置文件就可以完成强制转换。