本节将简单介绍读取图像、显示图像、保存图像这几项基本操作。
本文使用代码如下:
import org.junit.Test;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import java.net.URL;
import static org.opencv.highgui.HighGui.*;
public class Demo {
static {
// 加载动态库
URL url = ClassLoader.getSystemResource("lib/opencv/opencv_java3416.dll");
System.load(url.getPath());
}
/**
* 图像的加载、显示以及保存
*/
@Test
public void demo() throws Exception {
// 加载图像
Mat imread = Imgcodecs.imread("src/main/resources/img/lena.png");
if (imread.empty()) {
throw new Exception("image is empty");
}
//显示图像
imshow("original img", imread);
//保存图像
Imgcodecs.imwrite("D:/lena_2.png", imread);
Mat greyMat = Imgcodecs.imread("D:/lena_2.png", Imgcodecs.IMREAD_GRAYSCALE);
imshow("wirtted Img show by grey", greyMat);
waitKey();
destroyAllWindows();
}
}
代码运行成功后会先读取 resources/img 文件夹下的 lena.png 图片,并在窗口打开(窗口名称为original img),之后会将图片的副本存至 D:/lena_2.png,然后再读取 D:/lena_2.png 图片,并将图像转为单通道灰度图像在窗口打开(窗口名称为wirtted Img show by grey)
OpenCV官方JavaAPI: OpenCV Java documentation (4.2.0)
1. 读取图像
imread()函数:OpenCV提供了 imread()函数 来读取图像,该函数支持各种静态图像格式。该函数的语法格式为:
|
|
|
|
式中 :
- Mat:返回值,为读取到的图像。如果未读取到图像,则返回NULL
- filename:要读取的图像的完整文件名
- flages:读取标记,即:图像读取模式 ImreadModel),用来控制读取文件的类型,取值如下:
图像读取模式 ImreadModel | ||
值 | 数值 | 含义 |
IMREAD_UNCHANGED | -1 | 按原样返回加载的图像(会带上alpha通道),忽略EXIF方向。 |
IMREAD_GRAYSCALE | 0 | 将图像转为单通道灰度图像 |
IMREAD_COLOR | 1 | 将图像转为BGR三通道彩色图像(默认值) |
IMREAD_ANYDEPTH | 2 | 如果图像深度为16-bit/32-bit则会返回该深度图像,否则返回8-bit图像 |
IMREAD_ANYCOLOR | 4 | 按照任何可能的颜色格式读取图像 |
IMREAD_LOAD_GDAL | 8 | 使用gdal驱动程序加载图像 |
IMREAD_REDUCED_GRAYSCALE_2 | 16 | 将图像转为单通道灰度图,且图像尺寸变为1/2 |
IMREAD_REDUCED_COLOR_2 | 17 | 将图像转为BGR三通道彩色图像,且图像尺寸变为1/2 |
IMREAD_REDUCED_GRAYSCALE_4 | 32 | 将图像转为单通道灰度图,且图像尺寸变为1/4 |
IMREAD_REDUCED_COLOR_4 | 33 | 将图像转为BGR三通道彩色图像,且图像尺寸变为1/4 |
IMREAD_REDUCED_GRAYSCALE_8 | 64 | 将图像转为单通道灰度图,且图像尺寸变为1/8 |
IMREAD_REDUCED_COLOR_8 | 65 | 将图像转为BGR三通道彩色图像,且图像尺寸变为1/8 |
IMREAD_IGNORE_ORIENTATION | 128 | 忽略EXIF中的方向标识,不旋转图 |
2. 显示图像
imshow()函数:OpenCV提供了 imshow()函数 来显示图像。直接调用该函数会创建一个指定名称的新窗口,并将图像显示在刚创建的窗口内。
|
|
式中:
- winname:窗口名称
- img:要显示的图像。
3. 保存图像
imwrite()函数:OpenCV提供了 imwrite()函数 来保存图像至指定位置。
|
|
|
|
式中:
- filename:要保存的目标文件的完整路径名,包含文件扩展名。
- img:被保存图像的名称。
- params:保存类型参数。
- 返回值:如果保存成功,则返回True;如果保存不成功,则返回False。
4. 其他涉及到的函数
4.1 waitKey函数
waitKey()用来等待按键,当用户按下键盘后,该语句会被执行,并获取返回值。
|
|
|
|
式中:
- delay:表示等待键盘触发的时间,单位是ms。当该值是负数或者零时,表示无限等待。该值默认为0。
- 返回值:若等待键盘触发的时间到期时,仍没有按键被按下,则返回-1;如果在等待期间有按键被按下,则返回该按键的ASCII码
4.2 destroyWindow函数
destroyWindow()用来释放(销毁)指定窗口。
|
|
式中:
winname:窗口的名称
4.3 destroyAllWindows函数
destroyAllWindows用来释放(销毁)所有窗口。
|
|