综合代码示例:
#include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main(int argc, const char* argv[]) { Mat image = imread("E:/opencv_test_photo/baby.jpg", 1); imshow("my baby", image); waitKey(0); destroyAllWindows(); return 0; }
读取、显示和写入图像是图像处理和计算机视觉的基础。即使在裁剪、调整大小、旋转或应用不同的滤镜来处理图像时,您也需要先读入图像。所以掌握这些基本操作很重要。
世界上最大的计算机视觉库 OpenCV 内置了这三个函数,让我们来看看每个函数的作用:
- imread()帮助我们阅读图像
- imshow()在窗口中显示图像
- imwrite()将图像写入文件目录
1.引入头文件
//Include Libraries #include<opencv2/opencv.hpp> #include<iostream> // Namespace nullifies the use of cv::function(); using namespace std; using namespace cv;
2.读取图像
要读取图像,请使用imread() OpenCV 中的函数。这是语法:
imread(filename, flags)
它需要两个参数:
- 第一个参数是图像名称,它需要文件的完全限定路径名。
- 第二个参数是一个可选标志,可让您指定应如何表示图像。OpenCV 为这个标志提供了几个选项,但最常见的包括:
- cv2.IMREAD_UNCHANGED 或者-1
- cv2.IMREAD_GRAYSCALE 或者0
- cv2.IMREAD_COLOR 或者1
flags 的默认值为 1,它将在图像中读取为彩色图像。当您想以特定格式读取图像时,只需指定适当的标志。要查看不同的标志选项,打开下列链接:https://docs.opencv.org/master/d8/d6a/group__imgcodecs__flags.html#ga61d9b0126a3e57d9277ac48327799c80
如下面的代码部分所示,我们将首先使用上述所有三个标志值读取测试图像:
// Read an image Mat img_color = imread("test.jpg", IMREAD_COLOR); Mat img_grayscale = imread("test.jpg", IMREAD_GRAYSCALE); Mat img_unchanged = imread("test.jpg", IMREAD_UNCHANGED);
或者以另一种形式:
Mat img_color = imread("test.jpg", 1); Mat img_grayscale = imread("test.jpg", 0); Mat img_unchanged = imread("test.jpg", -1);
三张照片的显示效果:
- 第一张图像以彩色显示
- 下一个为灰度
- 第三个是彩色的,因为这是图像的原始格式
3.显示图像
imshow()在 OpenCV 中,您使用该函数显示图像。这是语法:
imshow(window_name, image)
这个函数也有两个参数:
- 第一个参数是将要显示在窗口上的窗口名称。
- 第二个参数是您要显示的图像。
要一次显示多个图像,请为要显示的每个图像指定一个新的窗口名称。
该imshow()函数旨在与waitKey()anddestroyAllWindows()/destroyWindow()函数一起使用。
该waitKey()函数是键盘绑定函数。
- 它需要一个参数,即显示窗口的时间(以毫秒为单位)。
- 如果用户在此时间段内按下任何键,程序将继续。
- 如果传递 0,则程序无限期地等待击键。
- 您还可以设置该功能以检测键盘上的 Q 键或 ESC 键等特定击键,从而更明确地告诉哪个键应该触发哪个行为。
该函数destroyAllWindows()销毁我们创建的所有窗口。如果需要销毁特定窗口,请给出确切的窗口名称作为参数。UsingdestroyAllWindows()还会从系统的主内存中清除窗口或图像。下面的代码示例显示了如何使用该imshow()函数来显示您读入的图像。
// Create a window. namedWindow( "color image", WINDOW_AUTOSIZE ); namedWindow( "grayscale image", WINDOW_AUTOSIZE ); namedWindow( "unchanged image", WINDOW_AUTOSIZE ); // Show the image inside it. imshow( "color image", img_color ); imshow( "grayscale image", img_grayscale ); imshow( "unchanged image", img_unchanged ); // Wait for a keystroke. waitKey(0); // Destroys all the windows created destroyAllWindows();
4.写一个图像
imwrite()最后,让我们讨论如何使用该函数将图像写入/保存到文件目录中。查看它的语法:
imwrite(filename, image).
1第一个参数是文件名,它必须包含文件扩展名(例如 .png、.jpg 等)。OpenCV 使用这个文件扩展名来指定文件的格式。
2第二个参数是您要保存的图像。True如果图像保存成功,该函数返回。
看看下面的代码。看看将图像写入磁盘是多么简单。只需指定带有适当扩展名的文件名(前面带有任何所需的路径)。包括包含图像数据的变量名称,您就完成了。
imwrite("grayscale.jpg", img_grayscale);