opencv 2.x学习笔记(一)加载和显示图像
2014-07-06 16:40
573 查看
opencv即计算机视觉库,其中封装了许多关于图像处理和计算机视觉算法的函数,为我们的使用提供了极大的便利性。图像操作是opencv中最基本的操作。作为入门的第一篇,下面首先简单的介绍一下,如何加载和显示一张图像。
core模块:opencv的核心功能模块,报了了opencv的基本数据结构等。
highgui模块:高层GUI图形用户界面,包含媒体的I/O输出,视频捕捉、图像和视频的编码解码、图形交互界面的借口等内容。
为了避免opencv中的数据结构和函数名称与其他类库中的名称发生冲突,opencv提供了cv名称空间。我们可以在程序开始处使用using指令来声明cv名称空间。或者使用cv::前缀来使用opencv所提供的数据结构和函数。
下面进入主函数进行分析。
为了确保我们能够获得一个有效的图像名称,我们使用了argc参数进行判断。如下所示:
(注:对argc和argv不了解的可以参考http://www.cnblogs.com/avril/archive/2010/03/22/1691477.html)
接着,我们创建了一个Mat对象用来存储用来加载的图像。
我们使用imread函数来加载图像,该函数有两个参数,第一个参数指示要加载的图像名称,第二个参数为加载图像类型,可以有以下几种方式。
CV_LOAD_IMAGE_UNCHANGED:这个标识在新版本中被废置了,忽略。
CV_LOAD_IMAGE_ANYDEPTH:若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回。
CV_LOAD_IMAGE_COLOR:
RGB格式来加载图像。
CV_LOAD_IMAGE_GRAYSCALE:始终将图像转换成灰度1
在检查图像数据是否正确加载之后,我们想要显示我们的图像,首先我们应该使用namedWindow函数创建一个opencv窗口,这个窗口创建后就被opencv自动管理。我们需要传入窗口的名称和窗口的标识符。常用标识符如下:
WINDOW_NORMAL:用户可以改变窗口的大小。
WINDOW_AUTOSIZE:窗口大小自动调整以适应所显示的图像,不能够手动改变窗口大小。
最后,我们需要使用imshow函数来更新opencv窗口以显示我们要加载的图像,我们只需要传递窗口的名称,和Mat对象。
我们想要当用户按下一个按钮后,窗口才消失。否则,窗口会一闪而过。我们使用waitKey函数来实现。这个函数只有一个参数,表示我们想要等待的毫秒数,0表示将一直等待下去。
源代码:
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace std; using namespace cv; int main(int argc, char* argv[]) { if( argc != 2 ) { cout << "Usage: dispay_image ImageToLoadAndDisplay" << endl; return -1; } Mat image; image = imread( argv[1], CV_LOAD_IMAGE_COLOR ); if( !image.data ) { cout << "Could not open or find the image" << std::endl; return -1; } namedWindow( "Display window", CV_WINDOW_AUTOSIZE ); imshow( "Display window", image ); waitKey(0); return 0; }
分析:
opencv 2.x采用了多模块的结构。每一个模块集中解决某一类问题。在使用这些模块之前,我们应该首先包含该模块的头文件。例如,在本程序中使用到了两个opencv头文件,分别对应core模块和highgui模块。core模块:opencv的核心功能模块,报了了opencv的基本数据结构等。
highgui模块:高层GUI图形用户界面,包含媒体的I/O输出,视频捕捉、图像和视频的编码解码、图形交互界面的借口等内容。
为了避免opencv中的数据结构和函数名称与其他类库中的名称发生冲突,opencv提供了cv名称空间。我们可以在程序开始处使用using指令来声明cv名称空间。或者使用cv::前缀来使用opencv所提供的数据结构和函数。
下面进入主函数进行分析。
为了确保我们能够获得一个有效的图像名称,我们使用了argc参数进行判断。如下所示:
if( argc != 2 ) { cout << "Usage: dispay_image ImageToLoadAndDisplay" << endl; return -1; }
(注:对argc和argv不了解的可以参考http://www.cnblogs.com/avril/archive/2010/03/22/1691477.html)
接着,我们创建了一个Mat对象用来存储用来加载的图像。
我们使用imread函数来加载图像,该函数有两个参数,第一个参数指示要加载的图像名称,第二个参数为加载图像类型,可以有以下几种方式。
CV_LOAD_IMAGE_UNCHANGED:这个标识在新版本中被废置了,忽略。
CV_LOAD_IMAGE_ANYDEPTH:若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回。
CV_LOAD_IMAGE_COLOR:
RGB格式来加载图像。
CV_LOAD_IMAGE_GRAYSCALE:始终将图像转换成灰度1
在检查图像数据是否正确加载之后,我们想要显示我们的图像,首先我们应该使用namedWindow函数创建一个opencv窗口,这个窗口创建后就被opencv自动管理。我们需要传入窗口的名称和窗口的标识符。常用标识符如下:
WINDOW_NORMAL:用户可以改变窗口的大小。
WINDOW_AUTOSIZE:窗口大小自动调整以适应所显示的图像,不能够手动改变窗口大小。
最后,我们需要使用imshow函数来更新opencv窗口以显示我们要加载的图像,我们只需要传递窗口的名称,和Mat对象。
我们想要当用户按下一个按钮后,窗口才消失。否则,窗口会一闪而过。我们使用waitKey函数来实现。这个函数只有一个参数,表示我们想要等待的毫秒数,0表示将一直等待下去。
程序运行结果:
相关文章推荐
- Python3+OpenCV学习笔记(一):图像加载、显示和保存
- OpenCV 2 学习笔记(4): 加载,显示和保存图像,Mat类与IplImage类
- OpenCV 学习笔记(1)显示图像
- OpenCV(C++接口)学习笔记1-图像的读取、显示、保存
- OpenCV学习笔记(三):将图像显示在MFC控件上并做直方图均衡化处理
- OpenCV 学习笔记(1)安装设置、显示图像
- OpenCV学习笔记01--图像和视频的显示
- opencv学习笔记-加载图像(释疑:非mat类与mat类、头文件引用)
- OpenCV 学习笔记(1)安装设置、显示图像
- 【Ubuntu+OpenCV】ubuntu/linux环境下,运用opencv实现图像的读入、显示--学习笔记【1】
- opencv视频学习第三课(显示图像)笔记整理
- OpenCV 学习笔记(1)安装设置、显示图像
- OpenCV学习笔记之图像视频显示
- OpenCV(C++接口)学习笔记1-图像读取、显示、保存
- OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- OpenCV学习笔记(9)利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面
- OpenCV学习笔记【1】:初试牛刀--显示图像
- opencv [c++版] 学习笔记(1) 显示图像及播放视频
- OpenCV学习笔记 利用MFC的Picture控件显示图像+播放视频和捕获摄像头画面 .
- OpenCV学习笔记-显示图像