文档章节

opencv javacv

z
 zdglf
发布于 08/22 19:40
字数 311
阅读 47
收藏 0

javacv 依赖

implementation 'org.bytedeco:javacv:1.4.2'
implementation 'org.bytedeco.javacpp-presets:opencv:3.4.0-1.4.2:android-arm'
implementation 'org.bytedeco.javacpp-presets:ffmpeg:3.4.0-1.4.2:android-arm'

mat 转图片

Utils.matToBitmap(myMat, myBitmap);

默认VideoWirter 只支持 MJPG 以及后缀.avi 文件

VideoWriter
('M','J','P','G') is the only supported by android while using .avi ext.

图片录制成mp4 api >= 18

https://developer.android.google.cn/reference/android/media/MediaMuxer https://stackoverflow.com/questions/17096726/how-to-encode-bitmaps-into-a-video-using-mediacodec

javacv

https://stackoverflow.com/questions/32988843/android-ffmpegframerecorder-javacv-unsatisfiedlinkerror

jcodec (纯java 慢)

https://stackoverflow.com/questions/21546906/how-to-open-cvvideowriter-in-android

openh264

https://github.com/cisco/openh264

使用javacv 中的FFmpegFrameRecorder 将bitmap 录制成mp4。(快)opencv 还是使用官网的opencv4android

//由于现在的javacv 只有armeabi-v7a架构的arm。我就把opencv的so放到armeabi-v7a里去
    AndroidFrameConverter converter = new AndroidFrameConverter();
    public long currentTs = 0;
    public long startTs = 0;
    int imageWidth = 0;
    int imageHeight = 0;
    private int fps = 10;
    private FFmpegFrameRecorder recorder;
    private boolean isStart = false;
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

void startRecord(){
        try {

            startTs = 0;
            recorder = new FFmpegFrameRecorder(Environment.getExternalStorageDirectory().getAbsolutePath() + "/A_Test/test.mp4", imageWidth, imageHeight);
            recorder.setVideoCodec(2);
            recorder.setFrameRate(fps);
            recorder.setFormat("mp4");
            recorder.start();
            isStart = true;
        }catch (FrameRecorder.Exception e){
            e.printStackTrace();
        }
    }
    void record(Mat rgba){
        long now = System.currentTimeMillis();
        if(!isStart||recorder==null){
           return;
        }

        if((now-currentTs)>=(1000/fps)) {


            if(bmp==null){
                bmp = Bitmap.createBitmap(imageWidth,imageHeight, Bitmap.Config.ARGB_8888);
            }

            Utils.matToBitmap(rgba, bmp);
            try {
                Frame frame = converter.convert(bmp);
                synchronized (recorder) {
                    if(startTs==0){
                        startTs = now;
                    }
                    if((now-startTs)*1000>recorder.getTimestamp()) {
                        recorder.setTimestamp((now-startTs)*1000);
                    }
                    recorder.record(frame);
                }

            }catch (FrameRecorder.Exception e){
                e.printStackTrace();
            }
            currentTs = now;

        }
    }


    public Mat onCameraFrame(CvCameraViewFrame inputFrame) {

        mRgba = inputFrame.rgba();
        mGray = inputFrame.gray();
        //时间戳水印
        //Imgproc.putText(mRgba, dateFormat.format(Calendar.getInstance().getTime()), new Point(40,40), Core.FONT_ITALIC,1.0f,new Scalar(255,255,255), 2);
        record(mRgba);
        return mRgba;
    }


© 著作权归作者所有

共有 人打赏支持
z
粉丝 4
博文 130
码字总数 24006
作品 0
广州
私信 提问
关于JavaCV安装使用过程网上普遍出现的一个问题的解决办法

网上搜索JavaCV,目前的资料还是比较少的。 Windows环境下安装过程大致是:先下载OpenCV,配置一下OpenCV的环境变量,这里配置的意思是能让java找得到。然后再下载JavaCV,把需要的jar包放进...

Glogo
2013/04/17
4.6K
1
Java基于百度AI+JavaCV+OpenCV 实现摄像头人数动态统计

【Java】人流量统计-动态版之视频转图识别请访问 http://ai.baidu.com/forum/topic/show/940413 本文是基于上一篇进行迭代的。本文主要是以摄像头画面进行人流量统计。并对返回图像进行展示。...

小帅帅丶
11/09
0
0
纯 JAVA 的对象跟踪技术

昨天晚上看了下优库的科技视频,那技术 NB 的让人都睡不着觉,尤其是什么所谓的体感技术等等,趁着今天没事干,就自己做了一个纯 JAVA 的对象跟踪软件。在网上查了下相关技术,有 OpenCV,J...

lixingbest
2011/07/17
3.4K
81
javacv:Could not load class bin.com.opencv.Smoother

Warning: Could not load class bin.com.opencv.Smoother: java.lang.NoClassDefFoundError: bin/com/opencv/Smoother (wrong name: com/opencv/Smoother) Warning: No classes found in the......

vw笑
2015/12/29
453
0
JavaCV使用討論(臉部辨識)

HI all : 最近我在研究有關OpenCV的視覺演算法,但由於要Build於Android手機上,因此選擇使用了JavaCV來實作「臉部辨識」 在幾經辛苦可以成功實作後,卻發現手機在橫式時可以成功辨識人臉,但...

天策軍師
2012/06/25
2.8K
3

没有更多内容

加载失败,请刷新页面

加载更多

node.js学习笔记之koa框架和简单爬虫练习

Koa -- 基于 Node.js 平台的下一代 web 开发框架 koa是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 使用 koa 编写 web 应用,可以免除重复繁琐的回调...

前端小攻略
5分钟前
0
0
JavaScript中的继承及实现代码

JS虽然不像是JAVA那种强类型的语言,但也有着与JAVA类型的继承属性,那么JS中的继承是如何实现的呢? 一、构造函数继承 在构造函数中,同样属于两个新创建的函数,也是不相等的 function Fn...

peakedness丶
27分钟前
1
0
记一次面试最常见的10个Redis"刁难"问题

导读:在程序员面试过程中Redis相关的知识是常被问到的话题。作为一名在互联网技术行业打击过成百上千名的资深技术面试官,本文作者总结了面试过程中经常问到的问题。十分值得一读。 Redis在...

小刀爱编程
40分钟前
14
0
TiDB Lab 诞生记 | TiDB Hackathon 优秀项目分享

本文由红凤凰粉凤凰粉红凤凰队的成员主笔,他们的项目 TiDB Lab 在本届 TiDB Hackathon 2018 中获得了二等奖。TiDB Lab 为 TiDB 培训体系增加了一个可以动态观测 TiDB / TiKV / PD 细节的动画...

TiDB
53分钟前
4
0
当区块链遇到零知识证明

本文由云+社区发表 当区块链遇到零知识证明 什么是零知识证明 零知识证明的官方定义是能够在不向验证者任何有用的信息的情况下,使验证者相信某个论断是正确的。这个定义有点抽象,下面笔者举...

腾讯云加社区
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部