《OpenCV 4计算机视觉项目实战 》 —2.7 读/写图像

举报
华章计算机 发表于 2019/11/10 10:31:22 2019/11/10
【摘要】 本节书摘来自华章计算机《OpenCV 4计算机视觉项目实战》 一书中第二章,第2.7节,作者[西班牙]大卫·米兰·埃斯克里瓦(David Millán Escrivá)[西班牙]维尼休斯·G.门东萨(Vinícius G. Mendon。

2.7 读/写图像

在介绍矩阵之后,我们将首先讨论OpenCV代码的基础知识。我们要学习的第一件事是如何读/写图像:

 image.png

image.png

现在我们来理解代码。

 image.png

首先,必须包括例子中需要的函数的声明。这些函数来自core(基本图像数据处理)和highgui(OpenCV提供的跨平台I/O函数是core和highgui;第一个包括基本类,比如矩阵,而第二个包括读函数、写函数,以及用图形界面显示图像的函数)。现在读取图像:

 image.png

imread是读取图像的主函数。该函数打开图像,并以矩阵格式存储它。imread接受两个参数,第一个参数是图像路径字符串,第二个参数是可选的,用于指定要加载的图像类型,默认情况下为彩***像。第二个参数可以使用以下选项:

cv::IMREAD_UNCHANGED:如果设置,当输入具有相应的深度时,返回16位/ 32位图像,否则将其转换为8位

cv::IMREAD_COLOR:如果设置,它总是将图像转换为彩***像(BGR,8位无符号)

cv::IMREAD_GRAYSCALE:如果设置,它总是将图像转换为灰度图像(8位无符号)

要保存图像,可以使用imwrite函数,它将矩阵图像存储在计算机中:

 image.png

第一个参数是保存图像的路径,以及想要的扩展名格式,第二个参数是要保存的矩阵图像。在这个代码例子中,我们创建并存储图像的灰度版本,然后将其另存为.jpg文件。加载的灰度图像将存储在gray变量中:

 image.png

通过使用矩阵的.cols和.rows属性,可以访问图像的列数和行数,换句话说,可以访问其宽度和高度:

 image.png

要访问图像的一个像素,可以用Mat OpenCV类中的模板函数cv::Mat::at<typenamet> (row,col),模板参数是所需的返回类型。8位彩***像中的类型名称是Vec3b类,它存储三个无符号字符数据(Vec =向量,3 =组件数,b = 一个字节)。在灰度图像中,可以直接使用无符号字符,或图像中使用的任何其他数字格式,例如uchar pixel = color.at <uchar>(myRow,myCol)。最后,为了展示图像,可以使用imshow函数,它创建一个窗口,其标题作为第一个参数,图像矩阵作为第二个参数:

 image.png

如果想要停止应用程序以等待用户按键,可以使用OpenCV函数waitKey,其参数为要等待按键的毫秒数。如果将参数设置为0,那么该函数会一直等待下去,直到用户按下某个键。

前面代码的结果如图2-4所示,左边的图像是彩***像,右边的图像是灰度图像。

 image.png

图 2-4

最后,我们按以下示例创建CMakeLists.txt文件,并使用该文件编译代码。

以下代码描述了CMakeLists.txt文件:

 image.png

要使用此CMakeLists.txt文件编译代码,必须执行以下步骤:

1. 创建一个build文件夹。

2. 在build文件夹内,(在Windows中)执行CMake或打开CMake GUI应用程序,选择source文件夹和build文件夹,然后按下“Configure”(配置)和“Generate”(生成)按钮。

3. 如果正在使用Linux或MacOSX,请照常生成Makefile,然后用make命令编译项目。如果正在使用Windows,请用在步骤2中选择的编辑器打开项目,然后进行编译。

在编译应用程序之后,将会在build文件夹中生成一个名为app的可执行文件。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。