本人eclipse开发java,准备用的opencv进行合成视频,经查找需要javacv的支持。

于是找到最新的opencv-3.4.1,然后下载了对应的java支持javacv1.4.1

1、下载opencv、javacv

    进入opencv官网下载opencv-3.4.1(
https://ayera.dl.sourceforge.net/project/opencvlibrary/opencv-win/3.4.1/opencv-3.4.1-vc14_vc15.exe

<https://ayera.dl.sourceforge.net/project/opencvlibrary/opencv-win/3.4.1/opencv-3.4.1-vc14_vc15.exe>

大概172M),再从(http://www.softpedia.com/get/Programming/Other-Programming-Files/JavaCV.shtml
大概390M)下载 javacv1.4.1的各环境支持


(如果需要可以再下载例子来看。opencv-3.4.1(https://codeload.github.com/opencv/opencv/zip/3.4.1
大概87M))

2、配置环境

    解压opencv,解压javacv (eclipse、tomcat、jdk这两个就不用再说了吧)

    配置opencv的路径,在Path增加指向opencv
(本人是64位系统,我的指向路径是C:\opencv\opencv\build\x64\vc15\bin;C:\opencv\opencv\build\java\x64;)

            说明一下 ...vc15\bin 是告诉java程序使用opencv的哪个版本进行视频的处理

                        ...\build\java\x64 是告诉java程序 系统的支持需要的dll文件

    其他环境说明:Tomcat用的是8 ,jdk用的是1.8

3、创建普通项目(window环境)

   
新建普通java项目,eclipse导入java包的支持,从javacv中取到ffmpeg.jar、javacpp.jar、javacv.jar、opencv.jar、javacv-platform.jar、ffmpge-windows-x86_64.jar、opencv-windows-x86_64.jar导到新项目中

以下是例子代码:在main函数中
    //图片转换器     //在main函数中时要让系统去加载这个opencv的相关变量,其它有运行容器(如Tomcat)则不用    
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);    
OpenCVFrameConverter.ToIplImage conveter = new
OpenCVFrameConverter.ToIplImage(); //申明一个图片处理的变量    
//------------------->begin 初始化视频录制器 // 参数说明视频存储位置mergeMp4Path:xxx.mov,视频的宽和高
recorder = new FFmpegFrameRecorder(mergeMp4Path,MAX_W,MAX_H);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4); // 13
recorder.setFormat("mov"); //设置格式mov为快播短播 recorder.setFrameRate(FRAME_RATE);
//此处说明每一秒多少帧,即说明1秒会录多少张照片 // recorder.setGopSize(FRAME_RATE*2);
//这一步没有感觉到有多少影响,暂时不管 recorder.setVideoBitrate(8000000); //8000kb/s
这个说明视频每秒大小,值越大图片转过来的压缩率就越小质量就会越高 //
recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P); // yuv420p
先默认吧,这个应该属于设置视频的处理模式吧 // 不可变(固定)音频比特率 recorder.setAudioOption("crf", "0"); //
最高质量 recorder.setAudioQuality(0);     // 音频比特率 //
recorder.setAudioBitrate(192000);     // 音频采样率 //
recorder.setSampleRate(44100); // 双通道(立体声)     recorder.setAudioChannels(2);
//------------------->end 初始化视频录制器     recorder.start();//开始录制
//------------------->begin 如果有多张,则以下代码则执行多次即可 String frame =
"xxxx.jpg";//单张图片的位置 IplImage image = opencv_imgcodecs.cvLoadImage(frame); //
非常吃内存!! Frame frame = conveter.convert(image); recorder.record(frame); //录制
    // 释放内存     cvLoadImage(fname); // 非常吃内存!!
    opencv_core.cvReleaseImage(image); //------------------->end
如果有多张,则以下代码则执行多次即可 //------------------->begin 开始录制音频     grabber = new
FFmpegFrameGrabber(mp3Path);     grabber.start();// 开始录制音频 while ((audioSamples
= grabber.grab()) != null) { recorder.setTimestamp(grabber.getTimestamp());
//告诉录制器这个audioSamples的音频时长 recorder.record(audioSamples); //录入音频 }
//------------------->end 开始录制音频     grabber.stop(); grabber.release();
    recorder.stop();     recorder.release();
 

 

    到此图片和音频的动作就合成成功了

 

 

 

4、创建web项目(Windows 64位+Tomcat 8)

   
新建一个web项目,将ffmpeg.jar、javacpp.jar、javacv.jar、opencv.jar、javacv-platform.jar、ffmpge-windows-x86_64.jar、opencv-windows-x86_64.jar导到项目
WEB-INF的lib下,使项目引用了lib依赖并引用Tomcat依赖

       将上述main函数抽成一个静态方法,例如是: AA.createVedio();

       在web项目中新建一个Servlet,并在doPost和doGet调用 AA.createVedio();

        此时项目成功访问,并能成功生成视频

 

5、搭建Linux环境(Linux Centos7 64位 + Tomcat 8)

    将上述Windows + Tomcat项目中的
ffmpge-windows-x86_64.jar和opencv-windows-x86_64.jar换成Linux的jar包,从javacv中找到
ffmpge-linux-x86_64.jar和opencv-linux-x86_64.jar替换即可

    这样项目的代码基本完成,接下来就是在linux环境搭opencv (jdk和Tomcat 就不再描述了)

    将刚下载的opencv-3.4.1.zip 放到服务器,然后用cmake命令生成opencv的运行依赖

    本人当时参照的是 https://www.cnblogs.com/hc101/p/7890115.html

    当然我遇到的问题是如下

    注意一下:

    一、命令的使用cmake xxxx(opencv的源码路径我的是\opencv\sources) -D CMAKE_BUILD_TYPE=DEBUG
-D CMAKE_INSTALL_PREFIX=/usr/local(/usr/local指的是什么,感觉没有用),这个命令在哪执行则它就会安装到哪里

        二、配置环境变量

    在/etc/profile 中首部加入

    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib

    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

    在/etc/ld.so.conf.d 增加opencv.conf

    在opencv.conf 加入/usr/local/lib

    sudo ldconfig //生效ID配置

    source /etc/profile //生效环境变量

    部署Tomcat ,将中的windows+Tomcat 的代码放到linux下,运行成功生成视频

 

 

 

 

    

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信