在这里插入图片描述
读取、显示和写入图像是图像处理和计算机视觉的基础。即使在剪切、调整大小、旋转或应用不同的过滤器来处理图像时,你也需要先读取图像。所以掌握这些基本运算是很重要的。

世界上最大的计算机视觉库OpenCV有这三个内置功能,让我们来看看它们到底是做什么的:

  • Imread()帮助我们读取图像
    -mshow()在窗口中显示图像
  • imwrite()将图像写入文件目录

我们将使用下图来演示这里的所有函数
在这里插入图片描述
首先,看一看这个代码示例。它读取并显示上面的图像。看它是如何包含我们刚刚提到的所有三个函数的。随着您的深入,我们将讨论这个实现中使用的每一个函数。

Python

# import the cv2 library
import cv2

# The function cv2.imread() is used to read an image.
img_grayscale = cv2.imread('test.jpg',0)

# The function cv2.imshow() is used to display an image in a window.
cv2.imshow('graycsale image',img_grayscale)

# waitKey() waits for a key press to close the window and 0 specifies indefinite loop
cv2.waitKey(0)

# cv2.destroyAllWindows() simply destroys all the windows we created.
cv2.destroyAllWindows()

# The function cv2.imwrite() is used to write an image.
cv2.imwrite('grayscale.jpg',img_grayscale)

C++

//Include Libraries
#include<opencv2/opencv.hpp>
#include<iostream>

// Namespace nullifies the use of cv::function(); 
using namespace std;
using namespace cv;

// Read an image 
Mat img_grayscale = imread("test.jpg", 0);

// Display the image.
imshow("grayscale image", img_grayscale); 

// Wait for a keystroke.   
waitKey(0);  

// Destroys all the windows created                         
destroyAllWindows();

// Write the image in the same directory
imwrite("grayscale.jpg", img_grayscale);

我们从导入Python和c++的OpenCV库开始(如下所示)。

Python

# import the cv2 library 
import cv2

在c++中,使用#include(如下所示)来完成相同的任务。还可以为它指定namespaces,从而直接引用函数名称。不需要在它们前面加上名称空间(例如,你可以直接使用read()而不是cv::imread())。

C++

//Include Libraries
#include<opencv2/opencv.hpp>
#include<iostream>

// Namespace nullifies the use of cv::function(); 
using namespace std;
using namespace cv;

读取一张图片

读取图像时,使用OpenCV中的imread()函数。这里的语法:

imread(filename, flags)

它有两个参数:

  • 第一个参数是图像名称,它需要文件的完全限定路径名。
  • 第二个参数是一个可选标志,允许您指定图像应该如何表示。OpenCV为这个标志提供了几个选项,但最常见的有:
cv2.IMREAD_UNCHANGED  or -1
cv2.IMREAD_GRAYSCALE  or 0
cv2.IMREAD_COLOR  or 1

flags的默认值是1,它将在图像中读取为彩色图像。当您希望以特定格式读取图像时,只需指定适当的标志。

在这一点上还需要注意的是,OpenCVBGR格式读取彩色图像,而大多数其他计算机视觉库使用的是RGB通道格式。因此,当您将OpenCV与其他工具包一起使用时,当您从一个库切换到另一个库时,不要忘记交换蓝色和红色通道。

如下面的代码部分所示,我们将首先使用上面描述的所有三个标志值读取测试图像。

Python

# Read an image
img_color = cv2.imread('test.jpg',cv2.IMREAD_COLOR)
img_grayscale = cv2.imread('test.jpg',cv2.IMREAD_GRAYSCALE)
img_unchanged = cv2.imread('test.jpg',cv2.IMREAD_UNCHANGED)

C++

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

或者

Python

img_color = cv2.imread('test.jpg',1)
img_grayscale = cv2.imread('test.jpg',0)
img_unchanged = cv2.imread('test.jpg',-1)

C++

Mat img_color = imread("test.jpg", 1);
Mat img_grayscale = imread("test.jpg", 0);
Mat img_unchanged = imread("test.jpg", -1);

显示一个图像

在OpenCV中,使用imshow()函数显示图像。这里的语法如下:

imshow(window_name, image)

他的函数也有两个参数:

  • 第一个参数是将在窗口中显示的窗口名称。
  • 第二个参数是要显示的图像。

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

imshow()函数被设计成与waitKey()destroyAllWindows() / destroyWindow()函数一起使用。
waitKey()函数是一个键盘绑定函数。

  • 它只接受一个参数,即显示窗口的时间(以毫秒为单位)。
  • 如果用户在这段时间内按下任意键,程序将继续运行。
  • 如果传递了0,程序将无限期地等待按键。
  • 还可以设置函数来检测特定的按键,如键盘上的Q键或ESC键,从而更明确地告诉哪个键应该触发哪个行为。

destroyAllWindows()函数会销毁我们创建的所有窗口。如果一个特定的窗口需要被销毁,给出确切的窗口名作为参数。使用destroyAllWindows()还可以从系统的主内存中清除窗口或映像。下面的代码示例展示了如何使用imshow()函数来显示读取的图像。

Python

#Displays image inside a window
cv2.imshow('color image',img_color)  
cv2.imshow('grayscale image',img_grayscale)
cv2.imshow('unchanged image',img_unchanged)

# Waits for a keystroke
cv2.waitKey(0)  

# Destroys all the windows created
cv2.destroyAllwindows() 

C++

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

下面的GIF演示了执行代码、可视化输出和关闭输出窗口的过程
在这里插入图片描述

写入图像

最后,让我们讨论如何使用imwrite()函数将图像写入/保存到文件目录中。检查它的语法:

imwrite(filename, image).
  • 第一个参数是文件名,它必须包括文件名扩展名(例如.png、.jpg等)。OpenCV使用这个文件名扩展名来指定文件的格式。
  • 第二个参数是要保存的图像。如果成功保存图像,则函数返回True。

Python

cv2.imwrite('grayscale.jpg',img_grayscale)

C++

imwrite("grayscale.jpg", img_grayscale);
GitHub 加速计划 / opencv31 / opencv
77.38 K
55.71 K
下载
OpenCV: 开源计算机视觉库
最近提交(Master分支:2 个月前 )
c3747a68 Added Universal Windows Package build to CI. 12 天前
9b635da5 - 12 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐