HighGUI(high-level graphical user interface)库是OpenCV将操作系统、文件系统和摄像机之类的硬件进行交互的一些功能的库文件,通过HighGUI库,我们可以方便的打开窗口,显示图像,读出或者写入图片,视频等,处理简单的鼠标,光标和键盘事件,也可以做一些控件比如滑动条等。
目的:将一张图片投影到窗口上
创建窗口
我们采用HighGUI中的cvNameWindow()来实现这个功能,其接受两个参数,第一个参数用来表示新窗口的名称,这个名称显示在窗口的底部,同时用作HighGUI中其他函数调用新窗口的句柄,第二个参数是一个标志,用来表示是否需要使窗口的大小自动适应读入图片的大小。
int cvNameWindows{
const char* name;
int flags = CV_WINDOW_AUTOSIZE
};
需要注意的使flags,现在对flags的有效设置使0或者CV_WINDOW_AUTOSIZE,如果使用后者,HighGUI会根据图像的大小调整窗口大小。
在窗口被创建以后,如果不使用此窗口时,涉及到销毁问题,需要使用函数:
void cvDestroyWindow( const char* name );
同时HighGUI也提供了句柄与窗口的相关处理函数:
void* cvGetWindowHandle(const char* name);
const char* cvGetWindowName(void* window_handle);
HighGUI库也提供了cvResizeWindow()用来调整窗口的大小:
void cvResizeWindow(
const char* name;
int width;
int height;
)
载入图像
从磁盘中载入图像,OpenCV提供了cvLoadImage(),如下所示:
IplImage* cvLoadIamge(
const char* filename,
int iscolor = CV_LOAD_IMAGE_COLOR
);
当打开一张图片时,cvLoadImage并不分席文件扩展名,是通过分析图像文件的前几个字节来确定图像的编码格式,第二个参数iscolor有几个值可以选择,默认情况,图像以每个通道8位,3个通道的形式被读入,
cvLoadImage( filename, -1 ); //默认读取图像的原通道数
cvLoadImage( filename, 0 ); //强制转化读取图像为灰度图
cvLoadImage( filename, 1 ); //读取彩色图
与cvLoadImage相对应的是cvSaveImage(),实现了保存图像的功能,
int cvSaveImage(
const char* filename;
const CvArr* Image;
);
显示图像
在窗口中显示图片的函数是cvShowImage():
void cvShowImage(
const char* name;
const CvArr* image;
);
代码整理
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
// Define Window Name
char window_name[] = "Demo";
// Define File Path
char file_path[] = "Demo.jpg";
// Create a named window with the name of the file
cvNamedWindow(window_name);
// Load the image from the given file name
IplImage* img = cvLoadImage(file_path, 1);
// Show the image in the named window
cvShowImage(window_name, img);
waitKey(0);
// Clean up
cvDestroyWindow(window_name);
cvReleaseImage(&img);
return 0;
}
效果图如下
本文参考《学习OpenCV》等资料进行完善、更正,如有侵权,请联系作者删除、更改。
欢迎评论文章,给予宝贵建议,请关注作者,共同学习交流。