图像读取函数
Mat imread( const String& filename, int flags = IMREAD_COLOR );
filename:文件名
flags:图像类型,默认值1,彩色图像;0:灰度图像
图像显示
创建窗口
void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
winname:用于显示图像的窗口名称
flags:窗口类型,默认值1,自适应图片大小(不可调);0:使用时可手动调整窗口大小
显示图像
void imshow(const String& winname, InputArray mat);
winname:用于显示图像的窗口名称,若无此窗口则创建
mat:用于显示的图像矩阵
官方说明:“函数imshow在指定的窗口中显示图像。 如果窗口是使用cv :: WINDOW_AUTOSIZE标志创建的,则图像将以原始大小显示,但仍然受到屏幕分辨率的限制。 否则,缩放图像以适合窗口。 此函数后面应跟有cv :: waitKey函数,该函数显示指定毫秒的图像。 否则,它将不显示图像。 例如,** waitKey(0)**将无限显示窗口,直到任何按键(适用于图像显示)。 ** waitKey(25)**将显示一个25毫秒的帧,之后显示将自动关闭。 (如果你把它放在一个循环中来阅读视频,它将逐帧显示视频)”
等待显示完成
int waitKey(int delay = 0);
功能:用于等待图像显示完成,等待时长delay,直到读取到按键。函数执行完成会关闭该图像。
官方说明:“函数waitKey无限地等待一个键事件(当\f$\texttt{delay}\leq 0\f$),或者当它为正数时,等待延迟毫秒。由于操作系统在切换线程之间的时间最短,该函数将不会等待确切的延迟ms,它将等待至少延迟ms,这取决于当时在您的计算机上运行的其他内容。它返回按下的键的代码,如果在指定的时间之前没有按下键,则返回-1。这个函数是HighGUI中唯一能够获取和处理事件的方法,因此需要定期调用它来进行正常的事件处理,除非在负责事件处理的环境中使用HighGUI。只有在至少创建了一个HighGUI窗口且该窗口处于活动状态时,该函数才能工作。如果有几个HighGUI窗口,其中任何一个都可以是活动的。”
输入参数delay:等待时长,单位毫秒,默认0:无限等待。
返回值:等待期间的按键值ASCII码值
销毁窗口
void destroyWindow(const String& winname);
输入参数winname:待销毁窗口名称
void destroyAllWindows();
销毁所有窗口
注:图像显示窗口需调用此函数手动销毁。否则可能会报错“0x00007FFE64A9D030 (ntdll.dll)处(位于 ImageProcessing.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000010 时发生访问冲突。”
如以下代码在VS中运行会报如上错误:
char* imfile = "../lena-b.jpg";
Mat im = imread(imfile);
namedWindow("lena", 1);
imshow("lena", im);
waitKey();
system("pause");
return 0;
正确代码:
char* imfile = "../lena-b.jpg";
Mat im = imread(imfile);
namedWindow("lena", 1);
imshow("lena", im);
waitKey();
destroyAllWindows();
system("pause");
return 0;