openCV2 第一讲 图像的读写和显示

来源:互联网 发布:淘宝盗图怎么投诉 编辑:程序博客网 时间:2024/05/29 04:39

图像的读取和显示

#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<iostream>using namespace std;using namespace cv;int main(){Mat MyImage=imread("DOTA.jpg");if(!MyImage.data){cout<<"读取不到图片"<<endl;return 0;}namedWindow("小黑");imshow("小黑",MyImage);waitKey(0);return 1;}

结果如下:


我们从头往下看程序。

       第一行和第二行程序包含了opcv2库里面的两个重要的模块:core和highgui两个模块。

       opencv2库包含如下模块:

             core模块,包含核心功能,尤其是底层数据结构和算法函数。

             imgproc模块,包含图像处理函数。

             highgui模块,包含读写图像及视频的函数,以及操作图形用户界面函数。

             features2d模块,包含兴趣点检测子、描述子以及兴趣点匹配框架。

             calib3d模块,包含相机标定、双目几何估算以及立体视觉函数。

             video模块,包含运动估算、特征跟踪以及前景提取函数与类。

             objdetect模块,包含物体检测函数,如脸部与行人检测。

             ml模块,机器学习模块。

             还包含一些其他的模块。这些模块帮我们很容易地处理图像,当然首先你要了解模块中一些函数的应用。

       程序的第三行和第四行,C++的标准输入输出以及使用std命名空间。

       程序的第五行,使用CV命名空间,这样做的好处是在后面的程序中,不用再写cv::imread,cv::namedWindow,cv::

imshow,直接写imread,namedWindow,imshow。


       程序的第八行,读取图像,并且把图像数据存入到Mat类中。imread函数的介绍。

       cv::Mat image;这句话是将创建宽,高都是为0的图像(因为这是还没给他赋值)。Mat是一个结构体,从根本上来讲的话,一幅图像可以由一个由数值组成的像素矩阵表示。opencv2用cv::Mat这个数据结构来表示图片。矩阵的每一个元素都表示一个像素。该方法的返回值是一个结构体,包含着宽度和高度。我们可以通过调用cv::Mat   size()方法来获取该图像的尺寸;

       std::cout<<"size,"<<image.size().height <<","<<image.size().width<<endl;

       cv::Mat类是用于保存图像以及其他矩阵数据的数据结构。默认情况下,它们的尺寸是0,但是我们也可以指定初始尺寸:

            cv::Mat  image(240,320,CV_8U,cv::Scalar(100));

       其中这里的CV_8U表示的是对应的像素值是8位无符号类型。对于彩色图像,你需要指定3个通道(CV_8UC3)。还有CV_16SC3或者CV_32F。

       现在再来讲讲cv::imread("图片名“)。它的功能是读入一个图片,图片的类型可以是jpg,jpeg,bmp,png等。


       程序的第九行到第十行的意思是:如果MyImage.data为0的话,就输出“读取不到图片”。这是因为成员data事实上是指向已经分配好的内存块的指针,包括图像数据。当数据不存在时,它就简单的被设置成0;故我们可以通过这样的方法来检验图片是否传入好。

       对于第十二行,主要是用来创建一个窗口,图片就是显示在这个窗口中,“小黑”是这个窗口的名字.。注意named

Window中前一个W是大写的。

       十三行:imshow()是用来显示图片的,它有两个参数,第一个参数是窗口的名字(图片就是这个窗口中显示),第二个参数是要显示的图片名字。


       接下来介绍一下waitKey(0):这句话的意思是显示图片过后等待多长时间,其中参数如果设置成0,或者负数的话,那图片不会消失,会一直等待,直到我们去按下一个键,如果设置成一个正数的n话,表示图片会显示n毫秒后关闭。

       最后,如果你希望讲处理过后的图像保存在磁盘中,这通过下下面的highgui函数得以实现:

       cv::imwrite("output.bmp",result);文件的后缀决定了图像的保存时的编码格式。

注意事项::

       如果按上述编写的话出项错误的话,有可能是你的图片位置放得不对。建议将图片放在debug文件外面(即与debug处于一个文件内),如果你不是放在那里,你可以这样试试(”..//图片名“)。或者(..图片名)或者(../图片名);






0 0
原创粉丝点击