Java 基于 OpenCV4.4 - 加载图像及保存图像教程
一、加载图像
从指定路径下加载图像文件,并把它转换为Mat对象以进行数字操作。OpenCV有一个名为imread的简单函数,用以从文件中读取图像。它通常只需要图像在本地文件系统上的文件路径,但同时这个函数还带有一个缺省的类型参数。让我们看看如何使用不同形式的imread。
图片 888.png
通过 Imgcodecs 类 获取 888.png 图像信息,代码如下:
@Test
public void test03(){
URL url = ClassLoader.getSystemResource("lib/opencv_java440.dll");
System.load(url.getPath());
Mat mat = Imgcodecs.imread("D:\\ProgramFiles\\personDocument\\picture\\888.png");
int total = mat.width() * mat.height();
System.out.println("mat =" + mat.width() + " * " + mat.height() +"="+ total + "," +mat.type());
}
如果OpenCV可以找到并正确加载 888.png 图像,则输出以下消息到控制台中:
需要注意的是,如果找不到该文件,OpenCV也不会抛出任何异常或者报告任何错误信息,而是显示加载的Mat对象为空,所以没有行和列:
二、通过传入参数处理图像
我们可以通过传递 IMREAD_GRAYSCALE 参数,控制加载灰度图像。代码实现如下:
@Test
public void test04() throws Exception {
URL url = ClassLoader.getSystemResource("lib/opencv_java440.dll");
System.load(url.getPath());
// IMREAD_GRAYSCALE:加载灰度图像
Mat mat = Imgcodecs.imread("D:\\ProgramFiles\\personDocument\\picture\\888.png",Imgcodecs.IMREAD_GRAYSCALE);
if (mat.empty()){
throw new Exception("image is empty!");
}
imshow("Original Image", mat);
waitKey();
}
在这里,我们使用IMREAD_GRAYSCALE将图像强制转换为灰度图像并加载到Mat对象中。
除了使用IMREAD_GRAYSCALE外,还可以向imread函数传递其他选项来得到特定的处理通道和图像深度,其中最有用的如表1-3所示。
三、保存图像到指定文件
使用OpenCV保存图像,OpenCV有一个同imread函数相对应的用来写入文件的函数,函数名是imwrite,也在Imgcodecs类中定义。通常情况下,该函数仅使用本地文件系统里指向图像存储位置的文件路径作为参数,但它也可以使用一些参数来修改图像存储的方式。
1. 把读取的图片保存到指定位置,代码实现如下:
@Test
public void test05() throws Exception {
URL url = ClassLoader.getSystemResource("lib/opencv_java440.dll");
System.load(url.getPath());
// IMREAD_GRAYSCALE:加载灰度图像
Mat mat = Imgcodecs.imread("D:\\ProgramFiles\\personDocument\\picture\\666.jpg",Imgcodecs.IMREAD_LOAD_GDAL);
if (mat.empty()){
throw new Exception("image is empty!");
}
imwrite("D:\\ProgramFiles\\personDocument\\picture\\667.jpg",mat);
}
2. 通过使用一个不同的扩展名来改变存储格式。例如,想要保存为便携式网络图形(Portable Network Graphic,PNG)格式,仅需调用imwrite函数时,使用一个不同的扩展名即可。
@Test
public void test06() throws Exception {
URL url = ClassLoader.getSystemResource("lib/opencv_java440.dll");
System.load(url.getPath());
// IMREAD_GRAYSCALE:加载灰度图像
Mat mat = Imgcodecs.imread("D:\\ProgramFiles\\personDocument\\picture\\666.jpg",Imgcodecs.IMREAD_LOAD_GDAL);
if (mat.empty()){
throw new Exception("image is empty!");
}
imwrite("D:\\ProgramFiles\\personDocument\\picture\\668.png",mat);
}
3. 向imwrite函数传递参数,最常见的参数是压缩参数。
对于JPEG,可以使用CV_IMWRITE_JPEG_QUALITY参数,参数值范围为0~100(值越大图像质量越高)。默认值是95。
对于PNG,可以使用0~9作为压缩程度的参数值,值越大表示图像越小且压缩时间越长。默认值是3。
可以通过使用另一个叫作MatOfInt的OpenCV对象来实现使用压缩参数压缩输出文件,MatOfInt是一个整型矩阵,或者是一个更简单的形式,即数组。代码实现:
@Test
public void test07() throws Exception {
URL url = ClassLoader.getSystemResource("lib/opencv_java440.dll");
System.load(url.getPath());
// IMREAD_GRAYSCALE:加载灰度图像
Mat mat = Imgcodecs.imread("D:\\ProgramFiles\\personDocument\\picture\\888.png");
if (mat.empty()){
throw new Exception("image is empty!");
}
MatOfInt matOfInt = new MatOfInt(Imgcodecs.IMWRITE_PNG_COMPRESSION,60);
imwrite("D:\\ProgramFiles\\personDocument\\picture\\889.png",mat,matOfInt);
}
如有不当之处请多多指教,如对你有所帮助,请评论或点赞予以支持,谢谢!
本文地址:https://blog.csdn.net/qq_41307443/article/details/109267935
上一篇: java集合的一些用法
下一篇: Mac系统安装JDK1.8及环境变量配置