《OpenCV 4计算机视觉项目实战 》 —2.7 读/写图像
2.7 读/写图像
在介绍矩阵之后,我们将首先讨论OpenCV代码的基础知识。我们要学习的第一件事是如何读/写图像:
现在我们来理解代码。
首先,必须包括例子中需要的函数的声明。这些函数来自core(基本图像数据处理)和highgui(OpenCV提供的跨平台I/O函数是core和highgui;第一个包括基本类,比如矩阵,而第二个包括读函数、写函数,以及用图形界面显示图像的函数)。现在读取图像:
imread是读取图像的主函数。该函数打开图像,并以矩阵格式存储它。imread接受两个参数,第一个参数是图像路径字符串,第二个参数是可选的,用于指定要加载的图像类型,默认情况下为彩***像。第二个参数可以使用以下选项:
cv::IMREAD_UNCHANGED:如果设置,当输入具有相应的深度时,返回16位/ 32位图像,否则将其转换为8位
cv::IMREAD_COLOR:如果设置,它总是将图像转换为彩***像(BGR,8位无符号)
cv::IMREAD_GRAYSCALE:如果设置,它总是将图像转换为灰度图像(8位无符号)
要保存图像,可以使用imwrite函数,它将矩阵图像存储在计算机中:
第一个参数是保存图像的路径,以及想要的扩展名格式,第二个参数是要保存的矩阵图像。在这个代码例子中,我们创建并存储图像的灰度版本,然后将其另存为.jpg文件。加载的灰度图像将存储在gray变量中:
通过使用矩阵的.cols和.rows属性,可以访问图像的列数和行数,换句话说,可以访问其宽度和高度:
要访问图像的一个像素,可以用Mat OpenCV类中的模板函数cv::Mat::at<typenamet> (row,col),模板参数是所需的返回类型。8位彩***像中的类型名称是Vec3b类,它存储三个无符号字符数据(Vec =向量,3 =组件数,b = 一个字节)。在灰度图像中,可以直接使用无符号字符,或图像中使用的任何其他数字格式,例如uchar pixel = color.at <uchar>(myRow,myCol)。最后,为了展示图像,可以使用imshow函数,它创建一个窗口,其标题作为第一个参数,图像矩阵作为第二个参数:
如果想要停止应用程序以等待用户按键,可以使用OpenCV函数waitKey,其参数为要等待按键的毫秒数。如果将参数设置为0,那么该函数会一直等待下去,直到用户按下某个键。
前面代码的结果如图2-4所示,左边的图像是彩***像,右边的图像是灰度图像。
图 2-4
最后,我们按以下示例创建CMakeLists.txt文件,并使用该文件编译代码。
以下代码描述了CMakeLists.txt文件:
要使用此CMakeLists.txt文件编译代码,必须执行以下步骤:
1. 创建一个build文件夹。
2. 在build文件夹内,(在Windows中)执行CMake或打开CMake GUI应用程序,选择source文件夹和build文件夹,然后按下“Configure”(配置)和“Generate”(生成)按钮。
3. 如果正在使用Linux或MacOSX,请照常生成Makefile,然后用make命令编译项目。如果正在使用Windows,请用在步骤2中选择的编辑器打开项目,然后进行编译。
在编译应用程序之后,将会在build文件夹中生成一个名为app的可执行文件。
- 点赞
- 收藏
- 关注作者
评论(0)