opencv 基础 (一):使用OpenCV读取、显示和写入图像
读取、显示和写入图像
是图像处理和计算机视觉的基础。即使在剪切、调整大小、旋转或应用不同的过滤器来处理图像时,你也需要先读取图像。所以掌握这些基本运算是很重要的。
世界上最大的计算机视觉库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
,它将在图像中读取为彩色图像。当您希望以特定格式读取图像时,只需指定适当的标志。
在这一点上还需要注意的是,OpenCV
以BGR
格式读取彩色图像,而大多数其他计算机视觉库使用的是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);
更多推荐
所有评论(0)