使用 OpenCV 读取、显示和写入图像

简介: 使用 OpenCV 读取、显示和写入图像

综合代码示例:

#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 内置了这三个函数,让我们来看看每个函数的作用:

  1. imread()帮助我们阅读图像
  2. imshow()在窗口中显示图像
  3. 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)

它需要两个参数:

  1. 第一个参数是图像名称,它需要文件的完全限定路径名
  2. 第二个参数是一个可选标志,可让您指定应如何表示图像。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);

三张照片的显示效果:

  1. 第一张图像以彩色显示
  2. 下一个为灰度
  3. 第三个是彩色的,因为这是图像的原始格式


3.显示图像


imshow()在 OpenCV 中,您使用该函数显示图像。这是语法:

imshow(window_name, image)

这个函数也有两个参数:

  1. 第一个参数是将要显示在窗口上的窗口名称。
  2. 第二个参数是您要显示的图像。

要一次显示多个图像,请为要显示的每个图像指定一个新的窗口名称。

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);

相关文章
|
2月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
41 0
|
3月前
|
监控 算法 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现获取图像并对图像进行边缘检测(C#)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现获取图像并对图像进行边缘检测(C#)
41 1
|
3月前
|
存储 监控 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C#)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C#)
27 0
|
3月前
|
存储 监控 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C++)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为AVI视频格式(C++)
35 0
|
16天前
|
编解码 计算机视觉 Python
opencv 图像金字塔(python)
opencv 图像金字塔(python)
|
1月前
|
存储 计算机视觉
OpenCV(三十九):积分图像
OpenCV(三十九):积分图像
18 0
|
1月前
|
计算机视觉
OpenCV(三十):图像膨胀
OpenCV(三十):图像膨胀
21 0
|
1月前
|
计算机视觉
OpenCV(二十九):图像腐蚀
OpenCV(二十九):图像腐蚀
25 0
|
1月前
|
计算机视觉
OpenCV(二十七):图像距离变换
OpenCV(二十七):图像距离变换
20 0
|
1月前
|
计算机视觉 Python
OpenCV 4基础篇| OpenCV图像的拆分和合并
OpenCV 4基础篇| OpenCV图像的拆分和合并