JavaCV入门指南:FrameConverter转换工具类及CanvasFrame图像预览工具类(javaCV教程完结篇)

前言

再此章之前,我们已经详细介绍和剖析了javacv的结构和ffmpeg和opencv的封装调用方式,以及javacv中重要的FrameGrabber和FrameRecorder的原理和用法,本章是javacv入门指南的最后一章,主要介绍转换工具和图像预览工具类。

FrameConverter介绍

FrameConverter封装了常用的转换操作,比如opencv与Frame的互转、java图像与Frame的互转以及安卓平台的Bitmap图像与Frame互转操作。

FrameConverter的子类

AndroidFrameConverter

Java2DFrameConverter

JavaFXFrameConverter

LeptonicaFrameConverter

OpenCVFrameConverter

由于JavaCV的Frame完全是仿照ffmpeg的AVFrame格式设计的,所有AVFrame和Frame不存在互转,它们的数据格式基本是互通的,直接赋值即可。

AndroidFrameConverter互转操作

专门用于安卓平台的转换操作,用于将Bitmap和Frame进行互转,以及提供了额外的yuv转bgr操作。

//Frame转换为Bitmap

Bitmap convert(Frame frame)

//bitmap转换为frame

Frame convert(Bitmap bitmap)

//yuv4:2:0像素转换为BGR像素

/**

* Convert YUV 4:2:0 SP (NV21) data to BGR, as received, for example,

* via {@link Camera.PreviewCallback#onPreviewFrame(byte[],Camera)}.

*/

public Frame convert(byte[] data, int width, int height)

Java2DFrameConverter互转操作

提供了Frame和java图像BufferedImage的互转操作。

//Frame转BufferedImage图像

public BufferedImage getBufferedImage(Frame frame)

// 伽马值,用来调节图像的灰度曲线,与显示设备有关

BufferedImage getBufferedImage(Frame frame, double gamma)

BufferedImage getBufferedImage(Frame frame, double gamma, boolean flipChannels, ColorSpace cs)

// BufferedImage图像转Frame

Frame getFrame(BufferedImage image)

Frame getFrame(BufferedImage image, double gamma)

Frame getFrame(BufferedImage image, double gamma, boolean flipChannels)

JavaFXFrameConverter互转操作

提供了JavaFX的图像Image和Frame的转换操作。

//把javaFX的图像Image转换为javacv的Frame

Frame convert(Image f)

//把Frame转换为javaFX的Image图像对象

Image convert(Frame frame)

LeptonicaFrameConverter互转操作

用于Leptonica和tesserac的PIX和Frame的互转,Leptonica是图像识别库google tesserac ocr的依赖库,也即是说该工具类一般是用于tesserac的图像PIX对象与Frame互转操作。

//Frame转tesserac的PIX图像

PIX convert(Frame frame)

//tesserac的PIX图像转Frame

Frame convert(PIX pix)

OpenCVFrameConverter互转操作

主要用于opencv的IplImage/Mat和Frame的互转操作。

IplImage与Frame互转

//把frame转换成IplImage

IplImage convertToIplImage(Frame frame)

//把IplImage转换成frame

Frame convert(IplImage img)

Mat与Frame互转

//frame转换成Mat

Mat convertToMat(Frame frame)

//mat转换成frame

Frame convert(Mat mat)

CanvasFrame介绍

CanvasFrame是用于预览Frame图像的工具类,但是这个工具类的gama值通常是有问题的,所以显示的图像可能会偏色,但是不影响最终图像的色彩。

CanvasFrame的原理

CanvasFrame内部是使用的swing的Canvas画板操作,使用canvas画板绘制图像。

CanvasFrame的使用

CanvasFrame canvas = new CanvasFrame("转换apng中屏幕预览");// 新建一个窗口

canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

canvas.setAlwaysOnTop(true);

//显示画面,这个操作用来显示Frame,一般Frame从各个FrameGrabber中获取或者从各个converter转换类中而来。

canvas.showImage(frame);

本章至此结束。

结语

从18年9月写javacv入门指南以来,经历了一年多的时间,虽然19年因为各种稀奇古怪(请自行脑补博主辗转反侧纠结的情景)的原因断更了一段时间,终于熬到了到本章结束,javacv入门指南系列至此正式完结

java 视频转码工具类_JavaCV入门指南:FrameConverter转换工具类及CanvasFrame图像预览工具类(javaCV教程完结篇)...相关推荐

  1. 你会写java视频转码的工具吗?

    是的,我会写Java视频转码的工具.视频转码是一种将视频从一种格式转换为另一种格式的过程.通常,这是为了使视频能够在不同的设备上播放,或者为了减小视频文件的大小.Java是一种流行的编程语言,可以用来 ...

  2. android 生成 资源文件,SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具...

    Vector矢量图在Android项目中的利用愈来愈广泛,但是如果你想用Android Studio自带的工具将SVG图片转化成Vector资源文件却是相当麻烦,首先能支持的SVG规范较少,其次操作流 ...

  3. 厉害了,手把手教你搭建一个代码在线编辑预览工具

    点击下方"前端开发博客",选择"设为星标" 回复"2"加入前端群 简介 大家好,我是一个闲着没事热衷于重复造轮子的不知名前端,今天给大家带来 ...

  4. 手把手教你快速搭建一个代码在线编辑预览工具

    简介 大家好,今天我跟大家分享的是一个代码在线编辑预览工具的实现教程,手把手教你完成这样一个项目. 目前这类工具使用很广泛,常见于各种文档网站及代码分享场景,相关工具也比较多,如codepen.jsr ...

  5. quicklook不能预览office_万物皆可格!给空格键施加神奇魔法的神器软件—快速预览工具QuicklookPC软件...

    大家好,我是元力.今天给大家带来一款电脑端使用的超级神奇的软件.只需要选中文件,然后点击空格键,即可预览文件. 支持大部分格式,比如word.excel.pdf.图片.视频甚至图片的源文件等等.真正实 ...

  6. 一个十分好用的桌面快速预览工具--QuickLook

    QuickLook是一款文件快速预览工具,使用该软件可以快速预览文件,支持的格式包括图片.视频.pdf.压缩包.软件包等. 1.下载安装(https://www.softpedia.com/get/D ...

  7. Pico VR 实时预览工具 Preview Tool,终于发布

    Pico 官方在 2022 年 4 月 2 号发布 XR 实时预览工具:Preview Tool v1.0 更新内容: 发布预览工具.具体介绍如下: 通过 Pico Unity/Unreal XR P ...

  8. 表格图片预览_Mac预览工具使用技巧,Mac预览功能实用技巧大全

    Mac预览怎么用?有很多的用户以为Mac自带的预览功能只具有简单的图片浏览功能,其实不然,其实"预览"是一款强大的看图.修图.改图软件,也同时是一款多功能的 PDF 阅读与编辑工具 ...

  9. Chrome 扩展程序——Imagus:图片放大预览工具

    主要介绍 Imagus 的功能及应用,Imagus 是一款简单实用的图片放大预览工具. 主要功能 Imagus 的功能非常单一,就是在浏览网页时,当鼠标悬停到一张图片后,会自动放大图片,进行预览,这在 ...

最新文章

  1. C++网络包截取开发
  2. 五个在线图形工具创建简单的设计元素
  3. 上周热点回顾(9.1-9.7)
  4. 在线求CR,你觉得我这段Java代码还有优化的空间吗?
  5. selenium java项目_1)selenium+ java集成,待深度项目流程应用
  6. 微赞dataconfig.php,PHP标准化之路(一):使用 EditorConfig 实现语法统一
  7. Linux操作Oracle(10)——plsql配置Oracle客户端方法【Oracle客户端安装、资源下载】详细教程
  8. List小心性能损失的方法
  9. Oracle内存结构详解(四)--Oracle SGA其他组成部分
  10. Labview视觉模块安装
  11. 计算机盘符为什么没有AB盘
  12. Ftp站点访问及FileZilla客户端使用
  13. C. Inna and Dima
  14. 调试lan8720a遇到的奇葩问题,自动协商永远10M。
  15. 电商名词sku和spu的区别
  16. Jina文章转载:多模态AI的范式变革多模态AI总结(2022年COLING会议)
  17. 解读B站Q4财报:Q4营收同比增74%,B站破圈能继续俘获大众芳心?
  18. Arduino 开锁,刷卡开锁模块
  19. 机器学习与知识发现_在机器学习中重新“发现”量子力学
  20. Python兼职收益快赶上我本职工作了,一月收入7000+,记录一下

热门文章

  1. UVA11764 Jumping Mario【Ad Hoc】
  2. Bailian4104 单词翻转(POJ NOI0107-27)【堆栈+字符流】
  3. 经典卷积神经网络的学习(二)—— VGGNet
  4. 存储与主板的外设接口
  5. 异或算法在算法求解中的妙用
  6. python学习-如何高效学 Python?
  7. python电脑下载安装-python
  8. python能做什么工作-学python后能找什么工作?Python是什么?
  9. 百度语音识别技术突破 巨头崛起
  10. mysql signal函数_MySQL:简单记录信号处理