2.java openCV4.x 入门-hello OpenCV

专栏简介

💒个人主页
📰专栏目录

点击上方查看更多内容
📖心灵鸡汤📖

我们唯一拥有的就是今天,唯一能把握的也是今天
建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫
🧭文章导航🧭
⬆️ 1.环境搭建
⬇️ 3.数据类型(CvType)与Scalar

hello OpenCV

  • 一、jar包说明
  • 二、图像的表示
  • 三、搭建项目
    • 1. 创建maven工程
    • 2. 创建普通的java工程
    • 3. 调用类库的两种方式
    • 4. 示例代码
    • 5.Mat对象构造函数说明
    • 6.CvType简单了解

   今天就是简单的搭建下项目,了解第一个类,Mat类,它是一个图像类,也是一个矩阵类。本节了解下它的几个构造函数

一、jar包说明

包名说明
org.opencv.calib3d 用于相机校准和三维重建
org.opencv.core 核心包,提供了OpenCV库中的基础功能和操作,是其他更高级的图像处理和分析功能的基础
org.opencv.dnn 深度学习网络模块
org.opencv.features2d 提供了用于检测和描述图像特征的类和函数
org.opencv.highgui 用于创建窗口、在窗口中显示图像简单操作,复杂操作可使用其他的Java库,比如Swing或JavaFX
org.opencv.imgcodecs 读取和保存图像
org.opencv.imgproc 图像处理。这个包包含了一系列用于对图像进行操作和转换的功能
org.opencv.ml 机器学习相关的功能
org.opencv.objdetect 目标检测模块
org.opencv.osgi 在 OSGi(Open Service Gateway initiative)环境中使用 OpenCV 库
org.opencv.photo 主要用于图像修复、色彩校正和图像对齐等任务
org.opencv.utils 提供了一些实用工具和辅助函数
org.opencv.video 用于视频处理和计算机视觉任务
org.opencv.videoio 用于处理视频文件的读取和写入

二、图像的表示

   在之前我们先简单的了解下图像,如下图所示,对我们来说,他是一个兔子的彩色图像,但是对于计算机来说,它只是一堆亮度各异的点。这副尺寸为 800× 500 的图像可以用一个 800 × 500 的矩阵来表示,矩阵元素的值表示这个位置上的像素的亮度,一般来说像素值越大表示该点越亮
在这里插入图片描述
我们将它放大之后,可以看到亮度各异的点
在这里插入图片描述
    一般来说,灰度图用 2 维矩阵表示,彩色图像用 3 维矩阵(M × N × 3)表示。目前我们见到的大部分图像都是用无符号 8 位整数(类型为 CV_8U)表示像素亮度。
    图像数据在计算机内存中的存储顺序为以图像最左上点(也可能是最左下点)开始,存储如下图所示

l0 0l0 1...l0 N-1
l1 0l1 1...l1 N-1
............
lM-1 0lM-1 1...lM-1 N-1

     l m n l_{mn} lmn 表示第 m m m n n n 列的像素值。如果是多通道图像,比如 RGB 图像,则每个像素用三个字节表示。在 OpenCV 中,RGB 图像的通道顺序为 BGR ,存储如下

B 00 B_{00} B00 G 00 G_{00} G00 R 00 R_{00} R00 B 01 B_{01} B01 G 01 G_{01} G01 R 01 R_{01} R01
B 10 B_{10} B10 G 10 G_{10} G10 R 10 R_{10} R10 B 11 B_{11} B11 G 11 G_{11} G11 R 11 R_{11} R11

三、搭建项目

1. 创建maven工程

   maven工程搭建可参考windows安装OpenCV及helloCV

2. 创建普通的java工程

  我们搭建一个普通的java工程, 如下所示👇️:
1.File➡️New➡️Project➡️New Project
在这里插入图片描述
2.设置工程信息,然后创建即可
在这里插入图片描述
3.创建完成后,将opencv-480.jar添加到项目中,如下所示
在这里插入图片描述

3. 调用类库的两种方式

  使用openCV需要调用类库,这里提供两种调用方式。
方式一:直接读取类库

System.load("D:\\OpenCV\\opencv\\build\\java\\x64\\opencv_java460.dll");

方式二:loadLibrary

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

这种方式需要将opencv_java480.dll放在jdk的bin目录下。

4. 示例代码

  Mat提供了一系列的构造方法,可以根据自己需要创建mat对象,如下所示

public class MatExamples {public static void main(String[] args) {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);//创建空矩阵Mat mat = new Mat();System.out.println("mat = " + mat);System.out.println("mat.dump() =\n " + mat.dump());//创建3x2的单通道8位无符号整数类型矩阵Mat mat1 = new Mat(3, 2, CvType.CV_8UC1);System.out.println("mat1.dump() = \n" + mat1.dump());//创建3x3的单通道8位无符号整数类型矩阵Mat mat2 = new Mat(new Size(4, 4), CvType.CV_8UC1);System.out.println("mat2.dump() = \n" + mat2.dump());//创建3X3的单通道的8位无符号整数类型矩阵int [] size={2,3};Mat mat3 = new Mat(size, CvType.CV_8UC1);System.out.println("mat3.dump() = \n" + mat3.dump());//创建带颜色的矩阵 BGRMat mat4 = new Mat(3, 3, CvType.CV_8UC3, new Scalar(100, 200, 255));System.out.println("mat4.dump() = \n" + mat4.dump());//显示矩阵Mat mat5 = new Mat(new Size(200, 200), CvType.CV_8UC3, new Scalar(255, 0, 0));HighGui.imshow("mat",mat5);HighGui.waitKey();}
}

输出信息说明

mat = Mat [ -1*-1*CV_8UC1, isCont=false, isSubmat=false, nativeObj=0x17a91e47ca0, dataAddr=0x0 ]

  这段信息表示创建了一个Mat对象,该对象是单通道的8位无符号整型像素值。isCont为false表示Mat对象不是连续的,isSubmat为false表示Mat对象不是子矩阵。nativeObj和dataAddr分别表示对象在内存中的地址和数据地址。

5.Mat对象构造函数说明

以下Mat的部分构造方法进行简要说明👇

用法 说明
Mat 一个通用的矩阵类,同时也是一个图像类,可以用来创建和操作多维矩阵
Mat(int rows, int cols, int type) 创建行数为 rows,列数为 cols,类型为 type 的图像
Mat(int rows, int cols, int type, ByteBuffer data) 创建行数为 rows,列数为 cols,类型为 type ,数据为data 的图像(不创建图像数据所需内存,而是直接使用 data 所指内存)
Mat(int rows, int cols, int type, ByteBuffer data, long step) 创建行数为 rows,列数为 cols,类型为 type ,数据为data ,行步长为step的图像(不创建图像数据所需内存,而是直接使用 data 所指内存)
Mat(Size size, int type)创建大小为 size,类型为 type 的图像(size指定width和height)
Mat(int[] sizes, int type) 创建宽x长y,类型为 type 的图像 (例:int[] sizes = {10,5},表示创建一个x为5y为10的图像)
Mat(int rows, int cols, int type, Scalar s)创建行数为 rows,列数为 col,类型为 type 的图像,并将所有元素初始 化为值 s
Mat(Size size, int type, Scalar s)创建大小为 size,类型为 type 的图像,并将所有元素初始 化为值 s
Mat(int[] sizes, int type, Scalar s)创建宽x长y,类型为 type 的图像 ,并将所有元素初始 化为值 s(例:int[] sizes = {10,5},表示创建一个x为5y为10的图像)
Mat(Mat m, Range rowRange, Range colRange)创建的新图像为 m 的一部分,具体的范围由 rowRange 和 colRange 指 定,此构造函数也不进行图像数据的复制操作,新图像与 m 共用图像数据
Mat(Mat m, Range rowRange)创建的新图像为 m 的一部分,具体的范围由 rowRange 定,此构造函数也不进行图像数据的复制操作,新图像与 m 共用图像数据
Mat(Mat m, Rect roi)创建的新图像为 m 的一部分,具体的范围 roi 指定,此构造函数也不进 行图像数据的复制操作,新图像与 m 共用图像数据

6.CvType简单了解

  我们先简单了解下数据类型。打开CvType类可以发现type类型有CV_8UC1,CV_16SC3 ,CV_32FC4等类型,其中8,16,32表示位,U表示无符号整数,S表示有符号整数,F表示浮点数,C表示通道,C1表示一个通道的图像,C3表示3个通道的图像。
如果需要更多的通道,可以采用CV_8UC(ch)的方式,例如
CV_8UC(2)表示8位无符号整数2通道的图像
其它:
通过源码可以发现存在4通道,在这里第四通道代表的透明度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/294446.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web日志/招聘网站/电商大数据项目样例【实时/离线】

Web服务器日志分析项目 业务分析 业务背景 ​ 某大型电商公司,产生原始数据日志某小时达4千五万条,一天日志量月4亿两千万条。 主机规划 (可略)日志格式: 2017-06-1900:26:36101.200.190.54 GET /sys/ashx/ConfigH…

【Linux】自定义协议+序列化+反序列化

自定义协议序列化反序列化 1.再谈 "协议"2.Cal TCP服务端2.Cal TCP客户端4.Json 喜欢的点赞,收藏,关注一下把! 1.再谈 “协议” 协议是一种 “约定”。在前面我们说过父亲和儿子约定打电话的例子,不过这是感性的认识&a…

Windows提权—数据库提权-mysql提权mssql提权Oracle数据库提权

目录 Windows 提权—数据库提权一、mysql提权1.1 udf提权1.1.2 操作方法一 、MSF自动化--UDF提权--漏洞利用1.1.3 操作方法二、 手工导出sqlmap中的dll1.1.4 操作方法三、 moon.php大马利用 1.2 mof提权1.3 启动项提权1.4 反弹shell 二、MSSQL提权MSSQL提权方法1.使用xp_cmdshe…

【MATLAB源码-第21期】基于matlab的BCH码编码译码仿真,调制使用QPSK,对比编码与未编码的误码率曲线。

操作环境: MATLAB 2022a 1、算法描述 QPSK调制解调:QPSK(Quadrature Phase Shift Keying)调制解调**是一种数字调制技术,通常用于数字通信系统。 调制: 1. 首先,将数字信号分成两路&#xff…

nodejs基础学习(一)

nodejs逆向python爬虫学习笔记 第一章 nodejs基础 nodejs基础 nodejs逆向python爬虫学习笔记开发环境vscodeF5运行注释js逆向作用变量**1、var全局**2、let块级作用域: {} if while for。。。等等循环中使用3、const 块级作用域,常量,不可以修改/重新定…

MCU友好过渡MPU,米尔基于STM32MP135开发板裸机开发应用笔记

以前微处理器(MPU)与微控制器(MCU)是截然不同的两种设备,MPU支持丰富的软件系统,如Linux和相关的软件堆栈,而MCU通常将专注于裸机和RTOS。近年来,随着MCU的性能越来越高,…

【A-006】基于SSH的新闻发布系统(含论文)

【A-006】基于SSH的新闻发布系统(含论文) 开发环境: Jdk7(8)Tomcat7(8)MySQLIntelliJ IDEA(Eclipse) 数据库: MySQL 技术: SpringStruts2HiberanteJSPJquery 适用于: 课程设计,毕业设计&…

一键切换ip地址软件的功能和优势

随着网络技术的不断发展和普及,IP地址已经成为我们在互联网上活动的重要标识。然而,在某些特定情况下,我们可能需要频繁地切换IP地址,以满足不同的网络需求或保护个人隐私。一键切换IP地址的软件应运而生,为我们提供了…

Vue-05

v-model 应用于其他表单元素 常见的表单元素都可以用v-model绑定关联 → 快速获取或设置表单元素的值 它会根据控件类型自动选取正确的方法来更新元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name…

红杉资本:2024年关于AI的4大预测

四大预测 预测一&#xff1a;Copilot 将逐渐向 AI Agent 转变。 2024 年&#xff0c;AI 将从辅助人类的 Copilot 转变为真正能替代一些人类工作的Agent。AI 将更像是一个同事&#xff0c;而不仅仅是一个工具&#xff0c;这点在软件工程、客服等行业已经初步显现。 预测二&…

2024年04月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年04月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

喜讯!全视通获评“医用气体行业优秀装备制造企业”称号

春意盎然&#xff0c;“渝”您相见。3月28日&#xff0c;“2024中国医学装备大会暨展览会”在重庆隆重启幕&#xff0c;本次展览会是我国医学装备领域政府部门、相关专家、头部企业深度参与的综合性展会&#xff0c;是先进技术最权威的展示平台之一&#xff0c;是引领创新发展的…

【物联网】Qinghub opc-ua 连接协议

基础信息 组件名称 &#xff1a; opcua-connector 组件版本&#xff1a; 1.0.0 组件类型&#xff1a; 系统默认 状 态&#xff1a; 正式发布 组件描述&#xff1a;通过OPCUA连接网关&#xff0c;通过定时任务获取OPCUA相关的数据或通过执行指令控制设备相关参数。 配置文件&a…

如何通过针对iOS的动态分析技术绕过反调试机制

在这篇文章中&#xff0c;我们将跟大家介绍和分析一种针对iOS的新型安全研究技术&#xff0c;该技术能够让iOS应用程序的调试过程更加轻松&#xff0c;并解决那些可能会延缓我们步伐的阻碍。 如果你要对一个采用了反调试技术的iOS应用程序或二进制文件进行调试的话&#xff0c;…

正则表达式引擎库汇合

1.总览表格 一些正则表达式库的对比 index库名编程语言说明代码示例编译指令1Posix正则C语言是C标准库中用于编译POSIX风格的正则表达式库 posix-re.cgcc posix-re.c 2PCRE库C语言提供类似Perl语言的一个正则表达式引擎库。 一般系统上对应/usr/lib64/libpcre.so这个库文件&am…

MDO4104B-6泰克MDO4104B-6混合域示波器

181/2461/8938产品概述&#xff1a; 包含逻辑分析仪、频谱分析仪和协议分析仪的示波器 - 所有这些都同步实现集成视图。尽管您可以将泰克 MDO4000B 系列简单地用作混合信号示波器或频谱分析仪&#xff0c;但真正的威力来自于两者的集成。您有史以来第一次可以在一台仪器上看到…

接口自动化框架搭建(八):pytest+allure+jenkins接入

1&#xff0c;安装allure插件 2&#xff0c;创建jenkins项目 怎么确定路径&#xff0c;可以查看工作空间&#xff0c;jenkins默认根目录就是工作空间 配置执行用例的命令&#xff0c;可以现在pycharm上试一下&#xff0c;然后在jenkins中配置&#xff1a; 把启动java服务的代…

Flutter 开发学习笔记(0):环境配置

文章目录 前言开发需求环境配置运行出现问题我运行也是解决了很久的问题镜像源设置为清华的镜像源&#xff08;不知道有没有影响&#xff09;使用JDK17&#xff0c;测试过JDK21和JDK11都不行手动下载flutter 对应的gradle添加阿里云代理安卓编译下载 运行成功&#xff01; 前言…

双目测距项目 | 在Jetson-Nano平台上部署SGBM深度测距+YOLOv5目标检测算法

项目应用场景 面向在 Jetson Nano 平台上部署 SGBM 深度测距和基于 YOLOv5 的目标检测算法&#xff0c;实现双目测距的功能。 项目流程与效果&#xff1a; 项目细节 > 具体参见项目 README.md项目获取 https://download.csdn.net/download/weixin_42405819/89051043

【2024年5月备考新增】《2024高项论文精华版(3)考试技巧》

3 考试技巧 3.1 考试难度 考试难度上&#xff0c;越是常见的题目、越是被大家预测的题目&#xff0c;阅卷就会更严格。 越是大家猜测不到的&#xff0c;越是小众的题目&#xff0c;阅卷严格程度就会低。 3.2 技巧 1、记住软考论文的目的&#xff0c;不是为了证明你的格式严谨…