本系列代码托管于:https://github.com/chintsan-code/opencv4-tutorials
本篇使用的项目为:image_read_show
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat src = imread("../sample/lena512color.bmp", IMREAD_GRAYSCALE);
if (src.empty())
{
cout << "could not load image..." << endl;
return -1;
}
namedWindow("input", WINDOW_FREERATIO);
imshow("input", src);
waitKey(0);
destroyAllWindows();
return 0;
}
imread:从文件中读取一张图像
cv::Mat cv::imread( const cv::String& filename, int flags = IMREAD_COLOR );
- filename:文件路径
- flag: 标识位,根据不同的标识位可以实现不同的效果,例如:
- IMREAD_COLOR:总是将图像转换为BGR图像
- IMREAD_GRAYSCALE:总是将图像转换为单通道灰度图像
- IMREAD_UNCHANGED:不改变加载的图像,例如读取带有透明通道的PNG图像时应该使用这个标识位
- IMREAD_ANYCOLOR:读取任意可能得图像格式,例如弹药读取HSL色彩模式的图像时应该使用这个标识位
- IMREAD_ANYDEPTH:读取16-bit/32-bit深度的图像时可以使用此标识位返回对应深度的图像,如果读取其他深度的图像也使用了这个标识位,则会返回8-bit图像
- ……
- 返回值:Mat格式的图像
可以使用cv::Mat::empty()
判断图像是否为空
namedWindow:创建一个窗口
void cv::namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
- winname:窗口名称,该名称可以用于后续使用这个窗口的标识符
- flags:标识位,根据不同的标识位可以实现不同的效果,例如:
- WINDOW_AUTOSIZE:自动调整窗口大小以适应图像,无法手动更改窗口的大小
- WINDOW_NORMAL: 自动调整窗口大小以适应图像,可以手动更改窗口的大小
- WINDOW_FREERATIO:调整窗口大小 ,与要显示的图像的比例无关
- WINDOW_KEEPRATIO :调整窗口大小,保持要显示的图像的比例
- ……
当图像比较大的时候flags应该使用WINDOW_FREERATIO或 WINDOW_KEEPRATIO。并且flags可以使用位运算符,例如flags == WINDOW_AUTOSIZE | WINDOW_KEEPRATIO
imshow:在指定窗口中显示一张图像
void cv::imshow(const cv::String& winname, cv::InputArray mat);
- winname:窗口名称,如果想要使用之前用namedWindow创建的串口,那么两个函数的winname应该保持一致
- mat:要显示的图像
waitKey:阻塞等待用户键盘输入,用户按键盘任意键就会停止阻塞,继续执行直到程序正常退出
int cv::waitKey(int delay = 0);
- delay:等待多久,单位ms,当delay为0是代表永久等待
- 返回值:如果在delay时间段内按下了按键,则返回该按键的代码,否则返回-1
destroyAllWindows:销毁所有HighGUI 窗口
void cv::destroyAllWindows()
如果之前创建了HighGUI 窗口,在程序结束前应该使用该函数进行统一销毁
评论 (0)