注
假设我们已经根据上一篇教程完成了开发环境的安装。
目标
经过本教程将学习到:
- 使用imread()载入一张图片
- 使用cvtColor()方法将BGR格式的彩色图像转换成灰度图像
- 使用imwrite()方法保存转换的灰度图像到指定位置
代码
public class ImageProc {
public static void main(String[] args) {
System.loadLibrary("libs/"+ Core.NATIVE_LIBRARY_NAME);
String filename = "images/lena.jpg";
String filenameDest = "images/lenaGray.jpg";
Mat img = imread(filename);
Mat imgGray = new Mat();
cvtColor(img,imgGray,COLOR_BGR2GRAY);
imshow("img_row",img);
imshow("img_gray",imgGray);
imwrite(filenameDest,imgGray);
waitKey(0);
System.exit(0);
}
}
解释
- 通过
System.loadLibrary()
方法加载动态库 - 定义打开的图像的路径以及所要转换的灰度图像的路径
- 通过
imread()
方法打开一张图像,获得一个Mat
对象 - 定义一个空的
Mat
对象 - 准备就绪后我们可以将一个BGR格式的彩色图像转换成灰度图像
cvtColor(img,imgGray,COLOR_BGR2GRAY);
该方法接收三个参数- 源图像
- 目标图像,也就是我们新建的
Mat
对象img_gray
- 最后一个参数代表转换的类型,在本例用使用
COLOR_BGR2GRAY
,因为imread()
方法默认以BGR方式载入图像
- 现在我们得到了一张灰度图像
imgGray
,我们用imwirte()
方法将其保存,该方法参数与imread()
类似。
imwrite(filenameDest,imgGray);
- 我们调用
imshow(“串口名”,Mat图像对象)
方法将彩色图像和灰度图像显示出来 - 最后添加
waitKey(0)
方法使窗体等待一个按键,以及System.exit(0);
方法推出程序运行。
结果
运行程序后我们将得到如下两个窗口:
并且在图片保存的目录下得到新的灰度图像