当前位置:网站首页 > Java教程 > 正文

opencv java 教程



OpenCV(开源计算机视觉库)是在BSD(开源协议)许可下发布的。它是一个高度优化的库,专注于实时应用程序。它具有C ++,Python和Java接口,支持Windows,Linux,Mac OS,iOS和Android。

OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能。

OpenCV被广泛应用于各种领域,如医疗影像处理、智能交通、安防监控、机器人视觉、虚拟现实等。它可以帮助开发者快速构建高效、准确、可靠的计算机视觉应用,并且支持多种编程语言,如C++、Python、Java等。

在计算机视觉应用中,OpenCV可以用来进行图像预处理、特征提取、物体检测、目标跟踪、三维重建等操作。通过结合深度学习技术,OpenCV还可以用于图像分类、目标分割、姿态估计等更加复杂的任务。

官网文档地址:

教程参考:

教程参考:

下载地址:

image.png

下载到本地后,双击进行安装即可

image.png

安装目录如下

image.png

 

build目录说明

image.png

这里是Java开发关注java目录即可

image.png

 

由于是64位系统,所以关注x64目录

image.png

DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。DLL文件,放置于系统中。当执行某一个程序时,相应的DLL文件就会被调用

方式1:

这里使用IDEA进行开发,导入opencv-460.jar库

使用快捷键 Ctrl+Shift+Alt+S打开
image.png

选择库项,导入Java库。
image.png

image.png

方式2:

除了上述方式,还可以将安装到本地仓库或私有仓库,然后在pom.xml中引入依赖。

在项目根目录创建目录,将上述提及的与放到该目录

image.png

在文件中,通过坐标的形式引入

 
 

执行上述代码,不出意外将出现如下异常:

 

解决方案有2种:

1.将文件拷贝至下面2个目录,任选其一即可。

image.png

image.png

2.通过指定虚拟机参数解决:

 

OpenCV中的Mat类是一个用于表示图像、矩阵和向量的基本数据类型,它可以包含任意尺寸和类型的元素。

创建一个Mat对象

 

创建Mat对象时同时设置矩阵的基本参数

 
 

访问Mat对象中的像素值

 

修改Mat对象中的像素值

 

获取Mat对象的大小和通道数

 

在OpenCV中,图象输入与输出使用、两个方法

1.imread()

 

从文件读取一张图像并创建一个Mat对象

 

2.imwrite()

 

将一个Mat对象保存到文件中

 

可以通过GUI的方式显示图片,不需要再将图像通过流输出到本地再来查看

 

OpenCV中的imencode方法和imdecode方法是用于图像压缩和解压缩的函数。

1.imencode()

imencode方法将一个OpenCV格式的图像进行编码成指定格式的图像数据流,常用的编码格式有JPEG、PNG等。

方法原型为:

 
 

将一张Mat对象保存为JPEG格式的文件

 

2.imdecode()

imdecode方法则是将压缩后的图像数据流解码成OpenCV格式的图像。

方法原型为:

 
 

当已经有了一个编码后的JPEG格式图像数据流,可以使用以下代码将其解码为OpenCV格式的图像:

 

1.将RGB图像转为灰度图像

在识别图像的时候一般用灰度图像,因为彩色图片信息量太大,为了提高运算速度,通常采用灰度。如果灰度图还是过大,则采用二值化图像。

比如一个点,灰度则只有256个维度,如果算上RGB色彩,则是1600万以上维度,因此就先降维(灰度)来计算

 

image.png

 

image.png

2.将BGR图像转为RGB图像

 

1.图像缩小

 

image.png

2.图像放大

 

image.png

1.亮度提升

当遇到图片比较暗的图像,可以通过亮度提升,从而实现达到更高的识别率

 

image.png

2.亮度降低

当遇到图片亮度很亮,曝光度很高的图像,可以通过降低亮度来提高识别率

 

image.png

图像锐化可以让彩色图片看起来更有色彩

 

image.png

图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也较大。一般情况下,图像梯度计算的是图像的边缘信息。严格来讲,图像梯度计算需要求导数,但图像梯度一般通过计算像素差值来得到梯度的近似值。

 

image.png

二值化的好处就是将图片上的有用信息和无用信息区分开来:

比如二值化之后的验证码图片,验证码像素为黑色,背景和干扰点为白色,这样后面对验证码像素处理的时候就会很方便。

常见的二值化方法为固定阀值和自适应阀值:

固定阀值

制定一个固定的数值作为分界点,大于这个阀值的像素就设为255,小于该阀值就设为0,这种方法简单粗暴,但是效果不一定好

自适应阀值

每次根据图片的灰度情况找合适的阀值。自适应阀值的方法有很多,这里采用了一种类似K均值的方法,就是先选择一个值作为阀值,统计大于这个阀值的所有像素的灰度平均值和小于这个阀值的所有像素的灰度平均值,再求这两个值的平均值作为新的阀值。重复上面的计算,直到每次更新阀值后,大于该阀值和小于该阀值的像素数目不变为止。

 

image.png

边缘检测是指寻找图像中明暗变化的区域,并将这些区域称为边缘。这些边缘通常表示了图像中物体之间的界限或轮廓。使用OpenCV进行边缘检测,可以帮助我们更好地理解图像中的细节和结构,从而提高图像处理和分析的效率和准确性。

 

image.png

高斯模糊本质上是低通滤波器,输出图像的每个像素点是原图像上对应像素点与周围像素点的加权和,原理并不复杂,就是用高斯分布权值矩阵与原始图像矩阵做卷积运算

 

image.png

图像反色是指对图像中的每个像素值进行取反操作,即将原始图像中每个像素的亮度值或颜色值减去255得到的新图像

 

image.png

  • 上一篇: 收费java教程
  • 下一篇: 重写java菜鸟教程
  • 版权声明


    相关文章:

  • 收费java教程2024-12-28 21:34:05
  • java servlet教程2024-12-28 21:34:05
  • java视频教程1442024-12-28 21:34:05
  • java框架制作教程2024-12-28 21:34:05
  • 371集java教程2024-12-28 21:34:05
  • 重写java菜鸟教程2024-12-28 21:34:05
  • java编译教程入门2024-12-28 21:34:05
  • java转ai教程2024-12-28 21:34:05
  • java教程web实战2024-12-28 21:34:05
  • java api大全教程2024-12-28 21:34:05