javaCV视频处理之如何提取人像视频
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要为大家展示了"javaCV视频处理之如何提取人像视频",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"javaCV视频处理之如何提取人像视频"这篇
千家信息网最后更新 2025年11月08日javaCV视频处理之如何提取人像视频
这篇文章主要为大家展示了"javaCV视频处理之如何提取人像视频",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"javaCV视频处理之如何提取人像视频"这篇文章吧。
效果图对比

左侧的为原视频,右侧为提取人像跳舞的视频。
pom文件引入依赖
com.baidu.aip java-sdk 4.16.3 org.bytedeco javacv-platform 1.5.5
java核心实现代码(完整)
import com.baidu.aip.bodyanalysis.AipBodyAnalysis;import org.bytedeco.javacv.FFmpegFrameGrabber;import org.bytedeco.javacv.FFmpegFrameRecorder;import org.bytedeco.javacv.Frame;import org.bytedeco.javacv.Java2DFrameConverter; import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.*;import java.util.HashMap; import org.bytedeco.ffmpeg.global.avutil;import org.bytedeco.ffmpeg.global.avcodec;import org.json.JSONObject;import sun.misc.BASE64Decoder; public class VideoProcessor { //设置APPID/AK/SK public static final String APP_ID = "25393592"; public static final String API_KEY = "OkRDD6FQwm5hTKGSMIEL9RN4"; public static final String SECRET_KEY = "ONAxohflnqL2HwBEQB2iGUCjmO5lgywp"; final static String videoFolderPath = "C:/Users/liuya/Desktop/video/"; final static String videoName = "demo.mp4"; final static String imageFolderPath = "C:/Users/liuya/Desktop/people/"; public static void main(String[] args) throws Exception { videoProcess(videoFolderPath + videoName); } //视频水印 public static void videoProcess(String filePath) { //抓取视频图像资源 FFmpegFrameGrabber videoGrabber = new FFmpegFrameGrabber(filePath); //抓取视频图像资源 FFmpegFrameGrabber audioGrabber = new FFmpegFrameGrabber(filePath); try { videoGrabber.start(); audioGrabber.start(); FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(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(); //处理图像 int videoSize = videoGrabber.getLengthInVideoFrames(); for (int i = 0; i < videoSize; i++) { Frame videoFrame = videoGrabber.grabImage(); if (videoFrame != null && videoFrame.image != null) { System.out.println("视频共" + videoSize + "帧,正处理第" + (i + 1) + "帧图片"); Java2DFrameConverter converter = new Java2DFrameConverter(); BufferedImage bi=converter.getBufferedImage(videoFrame); BufferedImage bufferedImage = splitting(bi); recorder.record(converter.convert(bufferedImage)); } } //处理音频 for (int i = 0; i < audioGrabber.getLengthInAudioFrames(); i++) { Frame audioFrame = 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 (Exception e) { e.printStackTrace(); } } public static BufferedImage splitting(BufferedImage image){ ByteArrayOutputStream out=new ByteArrayOutputStream(); try { ImageIO.write(image,"png",out); } catch (IOException e) { e.printStackTrace(); } return splitting(out.toByteArray()); } public static BufferedImage splitting(byte[] image){ // 初始化一个AipBodyAnalysis AipBodyAnalysis client = new AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY); // 可选:设置网络连接参数 client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); // 传入可选参数调用接口 HashMap options = new HashMap(); options.put("type", "foreground"); // 参数为本地路径 JSONObject res = client.bodySeg(image, options); return convert(res.get("foreground").toString()); } public static BufferedImage convert(String labelmapBase64) { try { BASE64Decoder decoder = new BASE64Decoder(); byte[] bytes = decoder.decodeBuffer(labelmapBase64); InputStream is = new ByteArrayInputStream(bytes); BufferedImage image = ImageIO.read(is); //失真处理 BufferedImage newBufferedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB); newBufferedImage.createGraphics().drawImage(image, 0, 0, Color.WHITE, null); ByteArrayOutputStream out=new ByteArrayOutputStream(); ImageIO.write(newBufferedImage, "png", out); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); return ImageIO.read(in); } catch (IOException e) { e.printStackTrace(); return null; } } } 控制台输出
以上是"javaCV视频处理之如何提取人像视频"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
视频
处理
人像
内容
参数
图像
篇文章
资源
学习
帮助
代码
右侧
图片
接口
控制台
效果
效果图
文件
易懂
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
福建泉州服务器购买
互联网服务器哪种好
软件开发与技术支持 合同
厦门一键网络技术
网络安全专项清理整治对照检查
公安厅网络安全领导是谁
网络技术能干嘛
风电场网络安全研讨会
服务器文件管理器怎么打开
网络安全审计考证时间
研华串口服务器
不出门网络技术有限公司
二手服务器散热器
银行数据库在总行吗
数据库 负责人int
安防与网络安全
计算机网络技术工作实践
有计算机软件开发大学
网络安全微课大赛
高新区操作性能好服务器生产商
阴阳师不同服务器怎么联机
济南周边软件开发培训班
厦门一键网络技术
微信云数据库是什么类型数据库
计算机网络技术可以考哪些证
卫生院网络安全自查评估报告
邯郸市网络安全宣传2020
服务器键的安全性
软件开发部门工作规划
余姚财务软件开发便宜的