您的位置:首页 > 编程语言 > Java开发

基于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、图像载入

<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  eclipsejavaopencv