java基于openCv图像处理_读取_保存图片

本文使用javaCV封装后的OpenCv

<dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.5</version>
</dependency>

1、图片读取、保存

在openCv中有一函数用于读取图片 imread(),保存图片imwrite()
由于javaCv二次封装,所以函数目录和openCv目录不同,javaCv函数在opencv_imgcodecs中,因为javaCv目前没有完整的文档所以只能查看源代码一个个找,后面自己使用别的功能时是需要自己看源代码的,反正挺苦逼的。

1.1、图片读取

public static void main(String[] args) {Mat mat = opencv_imgcodecs.imread("D:\\leiningen\\cat.jpg");ImageViewer imageViewer = new ImageViewer(mat);imageViewer.imshow();
}

ImageViewer 我着实没有找到在javaCv中相应的类,不过找到一个opencv_highgui.imshow()方法但是用不了,我看了里面的注释需要搭配线程使用反正我没搞出来。所以我也把这个类ImageViewer源代码贴出来吧(我放在最后了)。

1.2、图片保存

public static void main(String[] args) {Mat mat = opencv_imgcodecs.imread("D:\\leiningen\\cat.jpg");opencv_imgcodecs.imwrite("D:\\leiningen\\cat1.png",mat);
}

补充:

从代码中可以看到陌生的对象Mat,这个是矩阵的意思,这个对象是openCv的核心,简单介绍一下。
首先我们来创建一个矩阵开始。

public static void main(String[] args) {//创建RGB颜色当前是蓝色Scalar scalar = new Scalar(255, 0, 0, 0); // R G B 0//Size:width、heightMat mat = new Mat(new Size(100,200), opencv_core.CV_8UC3,scalar);ImageViewer imageViewer = new ImageViewer(mat);imageViewer.imshow();
}

上面代码片先是读取在保存,唯一区别就是保存时用的格式使用的是png,不需要进行图像编码和令人发狂的字节操作
按照官方说法:
JPEG可以使用CV_IMWRITE_JPEG_OUALITY参数,参数值范围在0 ~ 100 (值越大图像质量越高)默认值是95。
PNG,可以使用0 ~ 9 作为压缩程度的参数值,值越大图像质量越小,压缩时间越长,默认值是3.

package com.cloud.iot.util;import org.bytedeco.javacpp.BytePointer;
import org.bytedeco.opencv.opencv_core.Mat;import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.nio.ByteBuffer;public class ImageViewer {private JLabel imageView;private Mat image;private String windowName;public ImageViewer(Mat image) {this.image = image;}public ImageViewer(Mat image, String windowName) {this.image = image;this.windowName = windowName;}/*** 窗口展示*/public void imshow() {setSystemLookAndFeel();Image loadedImage = toBufferedImage(image);JFrame frame = createJFrame(windowName, image.arrayWidth(), image.arrayHeight());imageView.setIcon(new ImageIcon(loadedImage));frame.pack();frame.setLocationRelativeTo(null);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 用户点击窗口关闭}private void setSystemLookAndFeel() {try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch (ClassNotFoundException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (UnsupportedLookAndFeelException e) {e.printStackTrace();}}private JFrame createJFrame(String windowName, int width, int height) {JFrame frame = new JFrame(windowName);imageView = new JLabel();final JScrollPane imageScrollPane = new JScrollPane(imageView);imageScrollPane.setPreferredSize(new Dimension(width, height));frame.add(imageScrollPane, BorderLayout.CENTER);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);return frame;}private Image toBufferedImage(Mat matrix) {int type = BufferedImage.TYPE_BYTE_GRAY;if (matrix.channels() > 1) {type = BufferedImage.TYPE_3BYTE_BGR;}ByteBuffer byteBuffer = matrix.getByteBuffer();byte[] b = new byte[byteBuffer.remaining()];byteBuffer.get(b,0,b.length);BufferedImage image = new BufferedImage(matrix.cols(), matrix.rows(), type);final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();System.arraycopy(b, 0, targetPixels, 0, b.length);return image;}
}

今天就到这·······································································over

java基于OpenCv图像处理_读取_保存图片相关推荐

  1. Java基于opencv实现图像数字识别(一),java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  2. Java基于opencv实现图像数字识别(一)

    Java基于opencv实现图像数字识别(一) 最近分到了一个任务,要做数字识别,我分配到的任务是把数字一个个的分开:当时一脸懵逼,直接百度java如何分割图片中的数字,然后就百度到了用Buffere ...

  3. 拍卖系统源码 java,基于B2C的网上拍卖系统_秒杀与竞价 - WEB源码|JSP源码/Java|源代码 - 源码中国...

    文件名大小更新时间 a014基于B2C的网上拍卖系统_秒杀与竞价02019-08-15 a014基于B2C的网上拍卖系统_秒杀与竞价\截图02020-05-29 a014基于B2C的网上拍卖系统_秒杀 ...

  4. Java基于opencv—矫正图像

    更多的时候,我们得到的图像不可能是正的,多少都会有一定的倾斜,就比如下面的 我们要做的就是把它们变成下面这样的 我们采用的是寻找轮廓的思路,来矫正图片:只要有明显的轮廓都可以采用这种思路 具体思路: ...

  5. java基于安卓的人脸识别_基于android studio开发的 opencv关于android人脸识别的DEMO

    (2018年11月23日 在 链接 补充了一个新的BUG) 一个新项目的导入 可能会遇到多个问题,就这些问题 做个 解决集合,以便日后回顾, 版本 : android studio3.1.4 ,ope ...

  6. 基于OpenCV之视频读取,处理和显示框架的搭建(一)

    主要包括以下内容: 1.使用的主要函数的说明. 2.两个实例:视频读取和显示.搭建视频读取和处理框架,调用canny函数提取边缘并显示. 3.一些注意事项和代码说明. 一.使用的主要函数 1.延时函数 ...

  7. Python之文件操作_读取_编码_os模块

    目录 前言 一.文件基本操作 1.什么是文件 2.操作文件的步骤 3.文件的路径 4.open函数操作权限总结 5.文件读取 6.with-open-as 7.文件定位读取 8.文件编码 二.OS模块 ...

  8. 原生态基于OpenCV图像处理软件开发

    部分功能效果图 GitHub:https://github.com/CnYiXiaoNaiHe/OpenCV-   持续更新

  9. java图片降噪_Java基于opencv实现图像数字识别(四)—图像降噪

    Java基于opencv实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量 ...

最新文章

  1. 【组队学习】【24期】Datawhale组队学习内容介绍
  2. 如何实现蓝牙空中升级BLE OTA
  3. Linux系统之创建逻辑卷
  4. springboot 读取nacos配置的流程和数据变化实时更新机制
  5. 【计算机IO系列零】应用软件部分
  6. influxdb无法实现关联表_双汇:从棘手的InfluxDB+Redis到TDengine
  7. PhpStorm 对 AngularJS 的支持
  8. python字典功能默写_python之字典操作
  9. Rust 入坑指南:鳞次栉比 | CSDN 博文精选
  10. python123-python123练习题.doc
  11. ElasticSearch 多字段分组求和
  12. Ubuntu磁盘分区和挂载
  13. 10分钟明白为什么要使用微服务
  14. 国内外有名的计算机视觉团队汇总
  15. Intel(R) 6 Series/C200 Series Chipset Family USB Enhanced Host Controller - 1C26出现感叹号,USB无法使用
  16. 重磅!美图技术团队发布开源 ethereum dpos 实现
  17. CV领域论文查找方法
  18. 2020中国人工智能产业链企业图谱(名单)
  19. java实训答辩ppt_实训项目答辩.ppt
  20. 【无标题】Hadoop HA文件参数配置和HA启动

热门文章

  1. 六年老员工的幸福感|ONES 人物
  2. python根据excel生成报表_Python实现导出数据生成excel报表的方法示例
  3. 平行四边形、梯形导航条
  4. [IC卡类型]带你认识 M1、UID、CUID、FUID、UFUID
  5. iframe的src可以引入任何源,但是二者如果想通信的话,必须是同源,如果是非同源,如何解决?
  6. 合并多个ts文件,处理加密的ts文件
  7. Vue全家桶构建项目
  8. 基于SSM实现高校教材预定管理系统-毕业设计【附源码】
  9. 并联串联混合的电压和电流_中考物理满分之路:《电阻的串联和并联》2020年高频易错题集...
  10. Java多线程—守护线程