OpenCV入门(C++/Python)- 使用OpenCV读取、显示和写入图像(一)

简介: OpenCV入门(C++/Python)- 使用OpenCV读取、显示和写入图像(一)

读取、显示和写入图像是图像处理和计算机视觉的基础。即使裁剪、调整大小、旋转或应用不同的过滤器来处理图像,您也需要首先读取图像。因此,掌握这些基本操作很重要。


1.imread()读取图像


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


imread()函数


imread(filename,flags)


第一个参数是图像名称,它需要文件的完全限定路径名

第二个参数是一个可选的标志,允许您指定图像的表示方式。OpenCV为该标志提供了几个选项,但最常见的选项包括

1. cv2.IMREAD_UNCHANGED or -1

2. cv2.IMREAD_GRAYSCALE or 0

3. cv2.IMREAD_COLOR or 1

标志的默认值为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);


Or

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

2.imshow()在窗口中显示图像


在OpenCV中,您可以使用imshow()函数显示图像。语法如下所示:


imshow(window_name,图像)


此函数还接受两个参数:

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

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


imshow()函数旨在与waitKey()和destroyAllWindows() / destroyWindow()函数一起使用。


waitKey()


waitKey()函数是一个键盘绑定函数。

它需要一个参数,即显示窗口的时间(以毫秒为单位)。

如果用户在此时间段内按下任何键,程序将继续。

如果传递0,程序将无限期地等待按键。

您还可以将该功能设置为检测键盘上的Q键或ESC键等特定按键,从而更明确地告诉哪个键将触发哪种行为


destoryAllWindows()


函数destoryAllWindows()会破坏我们创建的所有窗口。如果需要销毁特定窗口,请给出确切的窗口名称作为参数。使用deargetAllWindows()还可以从系统的主内存中清除窗口或图像。下面的代码示例显示了如何使用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();

3.imwrite()将图像写入文件目录


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

imwrite(文件名,图像)


第一个参数是文件名,其中必须包括文件扩展名(例如.png、.jpg等)。OpenCV使用此文件扩展名来指定文件的格式。

第二个参数是您想要保存的图像。如果图像保存成功,该函数返回True。

请查看下面的代码。看看将图像写入磁盘有多简单。只需指定具有适当扩展名的文件名(前面有任何所需的路径)。包括包含图像数据的变量名称,您就完成了。


Python


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


C++


imwrite("grayscale.jpg", img_grayscale);
相关文章
|
28天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
29天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
29天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
38 7
|
30天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
42 5
|
29天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
70 3
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
61 2
|
2月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
111 5
|
2月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
111 4
|
2月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
148 4
|
3月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
35 4