OpenCV图像处理的四种基本操作

前言

图像处理的基本操作包含四个方面的内容:读取图像、显示图像、保存图像和获取图形属性。

其中:常用的图像属性有3个:shape , size , dtype。本文将一次讲解实现图像处理的四个操作。

一、读取图像

  如果要对一副图像进行图像处理,那么首先要做的就是先读取这张图像,然后才能进行剩下的操作,在OpenCV中,提供了用于读取图像的imread()方法,其语法如下

image=cv2.imread(filename,flags)

参数说明
#image:imread()方法的返回值,返回的是当前读取到的图像
#filename:要读取的图像的完整文件名称,比如:a.jpg
#flags:读取图像颜色类型的标记,当flag=0时,表示读取的是灰度图像(此时就算给出的图像是彩色图像,也将进行灰度处理把它转换成灰度图像),flag=1是默认值,表示读取的是彩色图像(此时flag参数可以省略。)

  ps:灰度图像是一种每个像素都是从黑到白,被处理为256个灰度级别的单色图像。256个灰度级别分别用0(纯黑色)~255(纯白色)的数值进行表示。

1.1读取图像示例

代码如下

import cv2

image = cv2.imread("c.jpg")
print(image)

此时,这张c.jpg的图片是放在当前工程下面的。

那么,如果需要读取的图片不在当前目录工程下,怎么办?

只需要将代码改为图片当前所在路径即可,如

image = cv2.imread("E:/c.jpg")#假设该图片在E盘根目录下

注意:路径中不能出现中文

通过print打印在出来的是这张图片的部分像素值(这个在后续章节中再讲)

二、显示图像

在读取图像章节中,print打印出来的只有当前读取图像的像素值,但是我们希望将这张图片显示出来,可以更加直观地看见它,OpenCV中提供了imshow()方法,waitKey方法destoryAllwindows()方法。

2.1方法概述

2.1.1imshow方法

imshow()方法用于显示图像,简单示例如下:

cv2.imshow(winname,mat)

参数说明
winname:显示图像的窗口名称。
mat:需要显示的图像

2.1.2 waitKey方法

waitKey方法用于等待用户按下键盘上按键的时间。当用户按下键盘上的任意按键时,将执行waitKey方法,并且获取waitKey方法的返回值,示例如下:

retval = cv2.waitKey(delay)

参数说明

revtal:与被按下的按键对应的ASCII码。

delay:等待用户按下键盘上按键的时间。(多用于设置延时等待)

ps:在有些时候,cv2.waitKey方法其实不需要这两个参数。示例在2.1.4中可见这种情况

2.1.3 destroyAllWindows方法

destroyAllWindows方法用于销毁所有正在显示图像的窗口,示例如下:

cv2.destroyAllWindows()
2.1.4一个简单的图像显示示例

代码如下:

import cv2
image = cv2.imread("c.jpg")
cv2.imshow("girl",image)
cv2.waitKey()
cv2.destroyAllWindows()

本地运行示例如图

注意事项

1.图像的窗口名称不能使用中文

2.为了能够正常显示图像,要在cv2.imshow()之后紧跟着cv2.waitKey()

三、保存图像

3.1方法概述

OpenCV中提供了用于按照指定路径保存图像的imwrite()方法,代码如下:

cv2.imwrite(filename,img)

参数说明

filename: 保存图像时所用的完整的路径

img: 你所需要保存的图像

3.1.1一个简单的保存图像示例
import cv2
img = cv2.imread("c.jpg")
cv2.imwrite("E:/c.jpg",img)

这样我们可以把当前工程目录下面的c.jpg保存到E盘根目录下,在运行完之后即可在E盘根目录下面看见这张图片:

四、获取图像属性

4.1图像属性简介

OpenCV提供了shape,size,dtype3个常用属性,具体含义分别如下:

shape:分两种情况:

1.如果是彩色图像,那么获取的是一个包含图像的水平像素(水平方向上的像素)、垂直像素(垂直方向上的像素)和通道数的数组。

2.如果是灰度图像,那么获取的是一个包含图像的水平像素和垂直像素的数组。(没有通道数)

size:获取的是图像包含的像素个数,其值为:水平像素x垂直像素x通道数。灰度图像的通道数为1.

dtype: 获取的是图像的数据类型。

4.1.1一个简单的获取图像属性的示例
import cv2
img_color = cv2.imread("c.jpg")
print("获取彩色图像的属性:")
print("shape=",img_color.shape)
print("size=",img_color.size)
print("dtype=",img_color.dtype)

print("获取灰度图像的属性:")
img_gray= cv2.imread("c.jpg",0)
print("shape=",img_gray.shape)
print("size=",img_gray.size)
print("dtype=",img_gray.dtype)

本地运行示例

对于此图片的属性获取结果如下

原图:

属性结果:

获取彩色图像的属性:
shape= (500, 500, 3)
size= 750000
dtype= uint8
获取灰度图像的属性:
shape= (500, 500)
size= 250000
dtype= uint8

以上即为OpenCV图像处理的四种基本操作与简单示例。

需要注意三个问题:

1.imread()方法读取的图像既可以是灰度图像也可以是彩色图像

2.为了能够正常显示图像,需要在cv2.imshow()方法后紧跟着cv2.waitKey()方法。

3.当声明路径名称时,"/"和"\\"的作用是等价的。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 如何提高 OpenCV 处理图像的速度: 1. 使用加速器:OpenCV 支持使用多种加速器,例如 CUDA 和 OpenCL。 2. 使用预先处理:在实际处理前预先处理图像,例如缩小图像大小或转换为灰度图像。 3. 优化代码:避免冗余代码,并尝试使用高效的 OpenCV 函数。 4. 并行处理:使用多核处理器或分布式系统进行并行处理。 5. 预先训练:对于机器学习模型,预先训练模型并保存模型参数,以减少每次处理图像所需的时间。 ### 回答2: 要提高OpenCV处理图像的速度,可以采取以下几种方法: 1. 使用较小的图像尺寸:如果图像的分辨率太高,可能会导致处理速度变慢。可以考虑将图像缩小到适当的尺寸,以减少计算量。 2. 使用多线程并行处理:OpenCV支持多线程处理,可以将图像分割成多个区域,分别在不同的线程中处理,以加快处理速度。 3. 使用适当的算法和函数:在进行图像处理时,选择适合的算法和函数,能够更高效地完成特定任务。了解OpenCV的函数参数和算法的特点,可以帮助我们选择合适的方法。 4. 优化代码实现:对于重复执行的代码,可以考虑进行代码优化,避免重复计算和内存操作,以提高运行效率。 5. 使用硬件加速:利用图像处理的硬件加速功能,如GPU,可以提供更高的处理速度。OpenCV也提供了与硬件加速相关的函数和算法。 6. 选择合适的数据类型:在OpenCV中,针对不同的图像类型有不同的数据类型。选择合适的数据类型,可以减少内存占用和计算量。 7. 使用OpenCV中的优化功能:OpenCV提供了一些优化的功能和库,如T-API、UMat等,可以提供更高的处理效率。 综上所述,通过调整图像尺寸、使用多线程、选择合适的算法和函数、优化代码实现、利用硬件加速、选择合适的数据类型以及使用OpenCV中的优化功能,可以有效地提高OpenCV处理图像的速度。 ### 回答3: 要提高OpenCV处理图像的速度,可以尝试以下几种方法: 1. 选择适当的图像处理算法:OpenCV提供了许多图像处理算法,每种算法都有不同的速度和效果。根据具体需求选择合适的算法,有时候简单的算法比复杂的算法更快。 2. 优化图像读取和保存速度:在读取和保存图像时,可以选择适当的图像格式(如JPEG)以减小文件大小,从而提高读取和保存的速度。 3. 并行处理:OpenCV提供了一些并行处理的函数(如并行循环),可以利用多核处理器实现并行计算,从而提高处理速度。 4. 减小图像尺寸:如果处理的图像过大,可以考虑减小图像尺寸,这样可以减少计算量,从而提高处理速度。可以使用OpenCV提供的函数来调整图像大小。 5. GPU加速:如果有GPU可用,可以使用OpenCV提供的GPU加速功能来处理图像,因为GPU在并行计算方面有很大的优势,可以显著提升处理速度。 6. 优化算法参数:某些算法拥有一些可调参数,通过调整这些参数,可以提高算法的速度和效果。 总之,要提高OpenCV处理图像的速度,需要选择适当的算法、优化图像读取和保存、并行处理、减小图像尺寸、使用GPU加速以及优化算法参数等方法来提高处理速度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

The light111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值