基于java(加eclipse)的OpenCV学习之二____图像加载、灰度图、开运算、画线、Canny检测
2016-10-31 21:39
344 查看
前言:
图像的一些简单操作,例如求灰度图、转hsv模型、腐蚀膨胀(开运算)、Canny检测等等。其实就是使用OpenCV的已有库函数来实现,代码当中调用函数就行了。
Java上的调用和C++的还是有区别的。
首先得要准备一个opencv Java的api文档,下载地址:http://download.csdn.net/detail/theblackbeard/9669419
注意点:
1、java使用opencv的库,其实几乎都是以静态方法的形式提供,比如灰度图、Canny边缘检测、膨胀、腐蚀等等,这都被封装起来,以静态方法提供给java使用,所以有时候在看关于C++的opencv的书时,上面所使用的函数,拿到java上来使用,得要清楚那个函数在java的api的那个包里面,目前一般对图像直接处理的函数都在org.opencv.imgproc这个包里面的Imgproc类里面提供。
2、图像载入
还有一种加载方式:
下面有一个示例代码,注释都很清楚,可以自己拿一张图片做实验,看看前后对比。
图像的一些简单操作,例如求灰度图、转hsv模型、腐蚀膨胀(开运算)、Canny检测等等。其实就是使用OpenCV的已有库函数来实现,代码当中调用函数就行了。
Java上的调用和C++的还是有区别的。
首先得要准备一个opencv Java的api文档,下载地址:http://download.csdn.net/detail/theblackbeard/9669419
注意点:
1、java使用opencv的库,其实几乎都是以静态方法的形式提供,比如灰度图、Canny边缘检测、膨胀、腐蚀等等,这都被封装起来,以静态方法提供给java使用,所以有时候在看关于C++的opencv的书时,上面所使用的函数,拿到java上来使用,得要清楚那个函数在java的api的那个包里面,目前一般对图像直接处理的函数都在org.opencv.imgproc这个包里面的Imgproc类里面提供。
2、图像载入
<span style="font-size:14px;">Mat srcImage = Imgcodecs.imread(getClass().getResource("dzjym01.png").getPath().substring(1));</span>这个图像的存放路径要放到代码的目录下面,eclipse的结构如下:
还有一种加载方式:
<span style="font-size:14px;">Mat src = Imgcodecs.imread("e:\\grey.PNG");</span>这样的话好理解,就是指定路径加载,输出图片也一样,可以用方式一,也可以使用这种指定路径的方式;使用方式一的话就是输出到src的同级目录下,在源代码的包的上级目录。
下面有一个示例代码,注释都很清楚,可以自己拿一张图片做实验,看看前后对比。
<span style="font-size:14px;">package cn.zhoucy; import java.util.ArrayList; import java.util.List; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; public class Test01 { public Test01() { /*调用opencv的库之前,得要有下面的代码来加载**/ System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); } //做开运算 public void runErode() { //载入原图 Mat srcImage = Imgcodecs.imread(getClass().getResource("dzjym01.png").getPath().substring(1)); //进行腐蚀 //1、建立腐蚀模板 Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, (new Size(15,5))); //2、建立输出图像对象 Mat dstImage = new Mat(); //3、进行腐蚀 Imgproc.erode(srcImage, dstImage, element);//腐蚀 Imgproc.dilate(dstImage, dstImage, element);//膨胀 System.out.println(Imgcodecs.imwrite("blackto.jpg",dstImage)); } //进行Canny边缘检测 public void runCanny() { //载入原图 Mat srcImage = Imgcodecs.imread(getClass().getResource("black.jpg").getPath().substring(1)); //参数定义 Mat dstImage = new Mat(); Mat edge = new Mat(); Mat grayImage = new Mat(); dstImage.create(srcImage.size(), srcImage.type()); //将原图转化成灰度图 Imgproc.cvtColor(srcImage, grayImage, Imgproc.COLOR_BGR2GRAY); //使用3x3内核来降噪 Imgproc.blur(grayImage, edge, new Size(3,3)); //运行Canny算子 Imgproc.Canny(edge, edge, 3, 9, 3,false); System.out.println(Imgcodecs.imwrite("blackto.jpg",edge)); } //画椭圆 public void runEllipse() { int angle = 0; //载入原图 Mat srcImage = Imgcodecs.imread(getClass().getResource("dzjym01.png") .getPath().substring(1)); Imgproc.ellipse(srcImage, new Point(600/2,600/2), new Size(600/4,600/16), angle, 0, 360, new Scalar(255, 129, 0), -1); System.out.println(Imgcodecs.imwrite("blackto.jpg",srcImage)); } //画线 public void runLine() { //载入原图 Mat srcImage = Imgcodecs.imread(getClass().getResource("dzjym01.png") .getPath().substring(1)); int width = srcImage.width(); int height = srcImage.height(); for(int j=0;j<4;j++) { Imgproc.line(srcImage, new Point(0, (height/4)*(j+1)), new Point(width, (height/4)*(j+1)), new Scalar(255, 129, 0), 2); Imgproc.line(srcImage, new Point((width/4)*(j+1), 0), new Point(( width/4)*(j+1), height), new Scalar(255, 129, 0), 2); } System.out.println(Imgcodecs.imwrite("blackto.jpg",srcImage)); } //转到HSV模型 public void runChange() { Mat srcImage = Imgcodecs.imread(getClass().getResource("dzjym01.png") .getPath().substring(1)); Mat dstImage = new Mat(); Imgproc.cvtColor(srcImage, dstImage, Imgproc.COLOR_RGB2HSV);//转成HSV模型 System.out.println(Imgcodecs.imwrite("blackto.jpg",dstImage)); } public static void main(String[] args) { Test01 t = new Test01(); //t.runErode(); //t.runLine(); } } </span>
相关文章推荐
- Opencv2系列学习笔记7(图像形态学运算)
- opencv学习笔记-加载图像(释疑:非mat类与mat类、头文件引用)
- OpenCV学习笔记7-图像算术运算
- OpenCV 学习(图像的基本运算)
- 【opencv学习之二十】图像基本运算
- opencv 2.x学习笔记(一)加载和显示图像
- Opencv2系列学习笔记7(图像形态学运算)
- 学习Opencv2.4.9(三)---图像的基本运算
- 学习【OpenCV入门教程之十一】 形态学图像处理(二)开运算,闭运算,梯度运算,顶帽,黑帽---思维导图笔记
- 【OpenCV图像处理入门学习教程一】OpenCV2 + 3的安装教程与VS2013的开发环境配置 + JPEG压缩源码分析与取反运算修改
- 学习Opencv2.4.9(三)---图像的基本运算
- opencv学习(二)之图像的加载、显示、保存
- OpenCV 学习(图像的基本运算)
- opencv学习笔记第五章 使用形态学滤波对图像进行开闭运算
- opencv2 学习第7天 RGB图像的直方图 & 灰度图的直方图
- OpenCV学习(十三)之根据路径连续加载图像放入vector中,最后再一张一张显示出来
- 【opencv学习之二】opencv与qt图像格式交换IplImage-->QImage
- (未实用 需多个函数配套使用)opencv3.0 函数学习 10——morphologyEx 形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑
- Python3+OpenCV学习笔记(一):图像加载、显示和保存
- OpenCV学习第二篇:加载,修改和保存图像(复习)