javaCV视频处理之如何提取人像视频(javacv,开发技术)

时间:2024-04-27 23:29:59 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

效果图对比

javaCV视频处理之如何提取人像视频

左侧的为原视频,右侧为提取人像跳舞的视频。

pom文件引入依赖

 <!--https://mvnrepository.com/artifact/com.baidu.aip/java-sdk--> <dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>4.16.3</version> </dependency> <!--https://mvnrepository.com/artifact/org.bytedeco/javacv-platform--> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>1.5.5</version> </dependency>

java核心实现代码(完整)

importcom.baidu.aip.bodyanalysis.AipBodyAnalysis;importorg.bytedeco.javacv.FFmpegFrameGrabber;importorg.bytedeco.javacv.FFmpegFrameRecorder;importorg.bytedeco.javacv.Frame;importorg.bytedeco.javacv.Java2DFrameConverter;importjavax.imageio.ImageIO;importjava.awt.*;importjava.awt.image.BufferedImage;importjava.io.*;importjava.util.HashMap;importorg.bytedeco.ffmpeg.global.avutil;importorg.bytedeco.ffmpeg.global.avcodec;importorg.json.JSONObject;importsun.misc.BASE64Decoder;publicclassVideoProcessor{//设置APPID/AK/SKpublicstaticfinalStringAPP_ID="25393592";publicstaticfinalStringAPI_KEY="OkRDD6FQwm5hTKGSMIEL9RN4";publicstaticfinalStringSECRET_KEY="ONAxohflnqL2HwBEQB2iGUCjmO5lgywp";finalstaticStringvideoFolderPath="C:/Users/liuya/Desktop/video/";finalstaticStringvideoName="demo.mp4";finalstaticStringimageFolderPath="C:/Users/liuya/Desktop/people/";publicstaticvoidmain(String[]args)throwsException{videoProcess(videoFolderPath+videoName);}//视频水印publicstaticvoidvideoProcess(StringfilePath){//抓取视频图像资源FFmpegFrameGrabbervideoGrabber=newFFmpegFrameGrabber(filePath);//抓取视频图像资源FFmpegFrameGrabberaudioGrabber=newFFmpegFrameGrabber(filePath);try{videoGrabber.start();audioGrabber.start();FFmpegFrameRecorderrecorder=newFFmpegFrameRecorder(videoFolderPath+"new"+videoName,videoGrabber.getImageWidth(),videoGrabber.getImageHeight(),videoGrabber.getAudioChannels());recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);recorder.start();//处理图像intvideoSize=videoGrabber.getLengthInVideoFrames();for(inti=0;i<videoSize;i++){FramevideoFrame=videoGrabber.grabImage();if(videoFrame!=null&&videoFrame.image!=null){System.out.println("视频共"+videoSize+"帧,正处理第"+(i+1)+"帧图片");Java2DFrameConverterconverter=newJava2DFrameConverter();BufferedImagebi=converter.getBufferedImage(videoFrame);BufferedImagebufferedImage=splitting(bi);recorder.record(converter.convert(bufferedImage));}}//处理音频for(inti=0;i<audioGrabber.getLengthInAudioFrames();i++){FrameaudioFrame=audioGrabber.grabSamples();if(audioFrame!=null&&audioFrame.samples!=null){recorder.recordSamples(audioFrame.sampleRate,audioFrame.audioChannels,audioFrame.samples);}}recorder.stop();recorder.release();videoGrabber.stop();audioGrabber.stop();}catch(Exceptione){e.printStackTrace();}}publicstaticBufferedImagesplitting(BufferedImageimage){ByteArrayOutputStreamout=newByteArrayOutputStream();try{ImageIO.write(image,"png",out);}catch(IOExceptione){e.printStackTrace();}returnsplitting(out.toByteArray());}publicstaticBufferedImagesplitting(byte[]image){//初始化一个AipBodyAnalysisAipBodyAnalysisclient=newAipBodyAnalysis(APP_ID,API_KEY,SECRET_KEY);//可选:设置网络连接参数client.setConnectionTimeoutInMillis(2000);client.setSocketTimeoutInMillis(60000);//传入可选参数调用接口HashMap<String,String>options=newHashMap<String,String>();options.put("type","foreground");//参数为本地路径JSONObjectres=client.bodySeg(image,options);returnconvert(res.get("foreground").toString());}publicstaticBufferedImageconvert(StringlabelmapBase64){try{BASE64Decoderdecoder=newBASE64Decoder();byte[]bytes=decoder.decodeBuffer(labelmapBase64);InputStreamis=newByteArrayInputStream(bytes);BufferedImageimage=ImageIO.read(is);//失真处理BufferedImagenewBufferedImage=newBufferedImage(image.getWidth(),image.getHeight(),BufferedImage.TYPE_INT_RGB);newBufferedImage.createGraphics().drawImage(image,0,0,Color.WHITE,null);ByteArrayOutputStreamout=newByteArrayOutputStream();ImageIO.write(newBufferedImage,"png",out);ByteArrayInputStreamin=newByteArrayInputStream(out.toByteArray());returnImageIO.read(in);}catch(IOExceptione){e.printStackTrace();returnnull;}}}

控制台输出

javaCV视频处理之如何提取人像视频

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:javaCV视频处理之如何提取人像视频的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Oracle表空间管理和用户管理的示例分析下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18