OpenCV把用于操作系统、文件系统以及摄像机等硬件设备交换的函数纳入了HighGUI(High-level Graphical User Interface)模块中。有了HighGUI模块,我们可以方便地打开窗口、显示图像、读出或写入图像相关的文件、鼠标事件和键盘事件。下面将对三部分分别进行介绍。
部分 | 作用 |
---|---|
硬件部分 | 最主要是对摄像机的操作 |
文件系统部分 | 主要工作是完成图片的载入和保存 |
窗口系统GUI | 创建窗口并将图片放入窗口显示,同时添加响应鼠标和键盘事件功能 |
图像文件的处理
图像的载入与保存
使用cv::imread()读取图片
cv::Mat cv::imread(const string& filename, int flags=cv::IMREAD_COLOR)
作用:载入图像,若失败不会抛出异常,返回的是空的cv::Mat(可以用cv::Mat::empty()==true来判断)。
标志 | 含义 | 默认值 |
---|---|---|
cv::IMREAD_COLOR | 读取三通道图像,即使输入是灰度图像,也会有三通道,只是每个通道拥有相同的数据 | 是 |
cv::IMREAD_GRAYSCALE | 读取单通道图像 | 否 |
cv::IMREAD_ANYCOLOR | 通道数由文件实际通道数(不超过3) | 否 |
cv::IMREAD_ANYDEPTH | 允许加载超过8bit深度 | 否 |
cv::IMREAD_UNCHANGED | 相当于cv::IMREAD_ANYCOLOR和cv::IMREAD_ANYDEPTH组合使用,可保留alpha通道。 | 否 |
使用cv::imwrite()保存图像
bool cv::imwrite(const string& filename, InputArray image, const vector<int>& params=vector<int>())
作用:保存图像,成功返回true,否则返回false。
扩展名 | 格式 | 大小 | 通道 |
---|---|---|---|
.jpg或.jpeg | baseline JPEG | 8位 | 单通道或三通道 |
.jp2 | JPEG2000 | 8位或16位 | 单通道或三通道 |
.tif或.tiff | TIFF | 8位或16位 | 单通道、三通道或四通道 |
.png | PNG | 8位或16位 | 单通道、三通道或四通道 |
.bmp | BMP | 8位 | 单通道、三通道或四通道 |
.ppm或.pgm | NetPBM | 8位 | 单通道 |