博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于JavaCv并发读取本地视频流并提取每帧32位dhash特征
阅读量:6999 次
发布时间:2019-06-27

本文共 2024 字,大约阅读时间需要 6 分钟。

1.读取本地视频流,pom依赖

依赖于 org.bytedeco下的javacv/opencv/ffmpeg 包

org.bytedeco
javacv
1.4.3
org.bytedeco.javacpp-presets
opencv
3.4.3-1.4.3
linux-x86_64
org.bytedeco.javacpp-presets
ffmpeg
4.0.2-1.4.3
linux-x86_64

2.读取本地视频流并解帧为 opencv_core.Mat

File file = new File("/home/lab/javacv/t11.mp4");FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(file);grabber.start();// 解帧为opencv_core.MatList
mats = new ArrayList<>();for (int i = 0; i < grabber.getLengthInFrames(); i++) { Frame frame = grabber.grabImage(); OpenCVFrameConverter.ToMat toMat = new OpenCVFrameConverter.ToMat(); opencv_core.Mat mat = toMat.convert(frame); if (mat != null) { mats.add(mat.clone()); }}grabber.stop();

3.获取32位dhash特征

dhash特征提取思路,图片Mat转为单通道的灰度图,并重置为5*5的Size,最后将其转储为长度为 25 的byte数组用以求取32位dhash特征

// 声明空的灰度图 Matopencv_core.Mat grayImg = new opencv_core.Mat(mat.rows(), mat.cols(), opencv_imgcodecs.IMREAD_GRAYSCALE);// 转储为灰度图opencv_imgproc.cvtColor(mat, grayImg, opencv_imgproc.COLOR_RGB2GRAY);// 修改Mat长宽sizeopencv_core.Mat resizedImg = new opencv_core.Mat();opencv_core.Size size = new opencv_core.Size(5,5);opencv_imgproc.resize(grayImg,resizedImg,size);// 转为 5*5 byte 数组byte[] bytePixels = new byte[5 * 5];resizedImg.data().get(bytePixels);int[] pixels = new int[bytePixels.length];for (int i=0; i
pixels[(i+1)*5+j] ? 1 : 0; feature = (feature << 1) + colBit; int rowBit = pixels[i*5+j] > pixels[i*5+j+1] ? 1 : 0 ; feature = (feature << 1) + rowBit; }}

多线程部分,可参考该博: https://www.cnblogs.com/nyatom/p/10119306.html

转载于:https://www.cnblogs.com/nyatom/p/10315915.html

你可能感兴趣的文章
haproxy,能够实现将来自用户的80端口的http请求转发至后端8000上的server服务
查看>>
Windows Server 2008 如何去除“IE 增加的安全配置”
查看>>
Emeditor自动切换到单元格选择模式
查看>>
awk学习
查看>>
我的友情链接
查看>>
mongodb中的副本集搭建实践
查看>>
Javascript 实现形如Extjs中的“关闭并带回”
查看>>
resources.resx相关
查看>>
oracle中如何用提示符显示用户状态?
查看>>
CentOS转的服务器磁盘规划
查看>>
Oracle基础知识之物理存储结构
查看>>
我的友情链接
查看>>
哈佛结构与冯?诺伊曼结构区别
查看>>
耶鲁大学心态 ,送给正在奋斗的人 !
查看>>
磁盘空间耗尽(deleted)
查看>>
ansible任务的异步执行
查看>>
模拟计算器
查看>>
yum本地及网络仓库创建
查看>>
命令行编辑
查看>>
CentOS挂载ntfs文件系统
查看>>