最近天气越来越热,春天的气息也越来越浓了。这篇文章算是我专栏里的第一篇文章了(前面那个算是引言吧),这篇文章中主要介绍OpenCV中的基础操作,包括加载图片、显示图片、保存图片等操作。这篇文章里的大部分内容都来自OpenCV的官方教程,其中也有我自己的理解和一部分数字图像处理中的知识。
函数库
要完成这些操作,我们需要两个函数库:core module和highgui module。前者包括了OpenCV中的基础模块库,比如图片容器Mat
;后者包含了负责输入输出操作的函数,如imread
和imwrite
。
加载图片
首先,我们需要创建一个Mat
对象来存储被加载的图片数据,然后就可以使用imread
函数来加载图片了。
Mat image;
image = imread(argv[1], CV_LOAD_IMAGE_COLOR);
第一个参数是所要加载的图片的名字(包括路径),这里我们从命令行参数来获取。OpenCV支持大多数常见的图片格式,如bmp、png、jpeg等等。
第二个参数指定图片的格式:
CV_LOAD_IMAGE_UNCHANGED
(<0)保持原加载图片的格式不变CV_LOAD_IMAGE_GRAYSCALE
(0)加载原图像的灰度(单通道)图CV_LOAD_IMAGE_COLOR
(>0)以RGB(三通道)格式加载原图像
如果只有第一个参数,默认会使用第三种格式:
Mat img = imread(filename)
显示图像
在加载完图像之后,我们便可以查看图像了。首先需要创建一个窗口以显示图片:
namedWindow( "Display window", WINDOW_AUTOSIZE );
第一个参数为窗口的名字,第二个参数为图片的处理方式,有以下两种方式:
CV_WINDOW_AUTOSIZE
:窗口适应原图片大小CV_WINDOW_NORMAL
:图片适应窗口大小
在使用第二个参数时,你还需要使用|
操作符指定图片是否保持纵横比:CV_WINDOW_KEEPRATIO为保持纵横比,CV_WINDOW_FREERATIO为不保持纵横比。
最后使用imshow
函数更新窗口内容为刚刚加载的图片即可:
imshow("Display window", image);
当然,仅仅是这样还是不够的,你会发现运行程序之后,图片一闪而过,根本无法长时间显示图片。因此,我们需要通过waitKey
函数设置窗口显示的时间(参数为等待时间,单位为ms)。这里我们设置时间为无限长(参数为0),直到用户按下任意键。
waitKey(0);
保存图片
保存图片的函数用法很简单,一般情况下只会用到前两个参数。第一个参数为图片的名字,记住一定要包含正确的图片格式(bmp、gif、png等),第二个参数为要保存的图片对象。
imwrite("rst_mage.jpg", rst_image);
第三个参数主要针对特定的格式,而且是以编码对(vector
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9);
imwrite("alpha.png", mat, compression_params);
参考资料
- OpenCV 2.4.13.6 document:Load and Display an Image
- OpenCV 2.4.13.6 document:Load, Modify, and Save an Image
- OpenCV 2.4.13.6 document:imwrite
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。