OpenCV for Python 学习第一天:图像的基础操作(读取、展示、保存)

我们都知道,OpenCV能够帮助我们处理视频和图像,咱们在图像处理中,除了Pillow库之外,最经常用到的也是它了。那么现在咱们就正式入坑OpenCV for Python,一起来感受一下OpenCV的魅力吧!

读取图像 imread()

OpenCv提供了一种cv2.imread的方法来读取图像。记忆方法也很简单image+read=imgread。我们可以使用这个函数读取多种静态图像。

一般来说,我们在括号内加入我们所要读取图片的地址就可以了。这个地址既可以是计算机的绝对地址,也可以是相对于咱们程序所在地的相对地址

除此之外呢,我们还有一个可选的参数,对于普通的开发者来说,平时一般并不会用到这样的参数传入。那么这里咱们就简单介绍几个,详细内容大家可以看看OpenCV官网。

  1. cv2.IMREAD_UNCHAGE
    顾名思义,这个参数就是咱们保持图像原格式不变,它所对应的数值是-1,也就是说,在传参的时候,我们既可以传上面的那么一大串英文字母,也可以传-1这个值。我们要注意的是,当我们不传参的时候,OpenCV会直接将我们的图片调整成为3通道的BGR图像

    BGR通常是指一种颜色表示方式,即以蓝色(Blue)、绿色(Green)、红色(Red)的顺序来描述图像或像素的颜色值。在计算机图形学、计算机视觉、数字图像处理等领域常常使用BGR表示颜色,也是OpenCV等计算机视觉库中默认的颜色表示方式。

    如果我们是在OpenCV中处理的话,出于对兼容性和实现的方便考虑,咱们使用BGR的图像可能会更方便一些。

  2. cv2.IMREAD_GRAYSCALE
    在使用程序时,我们可能会要对图片进行灰度处理。灰度处理是将彩色图像转为灰度图像的过程。灰度图像只有一个通道,代表亮度信息,而彩色图像有3个通道,分别代表红、绿、蓝三种颜色,每种颜色的亮度信息不同。那么我们也可以使用数值0传入。

    灰度处理的意义主要有以下几点:

    1. 简化图像:把彩色图像转为灰度图像,可以降低图像的复杂度,减少计算量,方便后续算法的实现。

    2. 分析物体:对于一些物体的特征,如纹理、形状、边缘等,可以通过灰度图像来提取和分析,比如在图像识别、目标跟踪、行人检测等方面被广泛应用。

    3. 去除噪声:在一些图像处理任务中,如图像增强、去噪等,通过灰度处理可以更好地去除图像的噪声,从而提高图像质量。

    也就是说,我们只需要几行代码就能完成灰度值的一个转换。

    import cv2
    
    img = cv2.imread("./1234.jpg",0)
    cv2.imwrite("test.jpg",img)
    

    在这里插入图片描述

  3. cv2.IMREAD_REDUCED_COLOR(GRAYSCALE)_2(4/8)

    这一行代码则是减小我们图片的大小。我们可以选择缩小的倍数(即上面的数字);同时也可以选择我们将图片设置成灰白还是彩色的。灰色我们就设置GRAYSCALE,若是彩色我们就设置COLOR

    比如说我想得到一张黑白缩小8倍的图片,我们将使用以下代码就可以一步搞定。我们可以非常明显地看到其中的差异

    import cv2
    
    img = cv2.imread("./1234.jpg",cv2.IMREAD_REDUCED_GRAYSCALE_8)
    cv2.imwrite("test.jpg",img)
    

    在这里插入图片描述


那么我们现在就来观察一下我们读取图像之后的输入吧!可以看到程序输出了部分像素值哦~
在这里插入图片描述

展示图片 imshow()

在OpenCV中,我们有多种创建窗口的方法。我们就挑选最简单也是最常用的一种方法进行讲解。需要注意的是,OpenCV库本身并不支持中文显示,咱们标题必须改成英文进行显示。(虽然网上有些方法可以用encode()方法将文本转换成为UTF-8,但是根据本人实操发现这种方法并不可行)

咱们用的函数叫做 imshow()这个方法可以打开一个新的窗口,并在窗口中显示我们所打开的图片,这个方法非常好用,我们只需要传入两个参数。

  • 窗口名称
  • 显示图片
import cv2

img = cv2.imread("./LFS.jpg",cv2.IMREAD_REDUCED_GRAYSCALE_8)
cv2.imshow("LuoFuMountain",img)
cv2.waitKey()

在这里插入图片描述

在使用这个方法时,它的底层逻辑是这样的:首先先创建一个指定名称的窗口,然后将图片显示在刚刚创建的窗口内。需要注意的是,这两个参数(名称与图片)都是必须导入的,否则会引起程序的报错哦~

等待按键 waitKey()

如果上一个实例没有最后一行的话,我们会看到窗口一闪而过,根本看不到任何界面。那么这个时候,我们可以等待用户的键盘输入,这样我们就可以让用户看清楚想要展示的界面了~

那么这个函数是waitKey()这个函数会等待键盘上的按键按下,当按下后,它会返回按下的键,这个时候我们可以根据返回值进行进一步的判断。我们要注意的是,返回值是ASCLL码,所以我们要了解想要获得的按键所对应的ASCLL。如果不想记这些特殊的编码,我们可以使用Python提供的ord()方法进行转换就可以了~

那么除此之外,我们还可以设置等待时间。当我们传入的值是负值或零的时候。表示无限等待,除此之外,我们将会等待以毫秒为单位的传入的数字。

import cv2

img = cv2.imread("./LFS.jpg",cv2.IMREAD_REDUCED_GRAYSCALE_8)
cv2.imshow("LuoFuMountain",img)
return_key = cv2.waitKey()

if return_key == ord("a"):
	cv2.imshow("PRESS A",img)
elif return_key == ord("b"):
	cv2.imshow("PRESS B",img)

cv2.waitKey()

在这里插入图片描述

同时我们还要注意大小写哈~OpenCV对大小写的要求也是十分严格的呢

我们还可以使用print()来查看我们WaitKey()的等待期间。我们可以发现,当我们在执行Waitkey()时,整个程序处于静止状态,当我们按下键盘上的按键后,程序才得以进行,并在控制台上输出了我们想要其输出的文字。

import cv2

img = cv2.imread("./LFS.jpg",cv2.IMREAD_REDUCED_GRAYSCALE_8)
cv2.imshow("LuoFuMountain",img)
return_key = cv2.waitKey()

if return_key == ord("a"):
	cv2.imshow("PRESS A",img)
elif return_key == ord("b"):
	cv2.imshow("PRESS B",img)

cv2.waitKey()
print("第二次触发按键")

在这里插入图片描述

保存图像 imwrite()

OpenCV和其他程序不一样的地方在于,我们保存不再是使用save()这样的函数,而是一个叫做imwrite()的函数。这个函数有两个必需参数和一个选填参数。

  • filename
    保存的路径,既可以是相对路径也可以是绝对路径
  • img
    保存图像的代码文件
  • params
    一个保存类型的参数,一般并不会用到
import cv2

img = cv2.imread("./LFS.jpg",cv2.IMREAD_REDUCED_GRAYSCALE_8)
cv2.imwrite("./GrayScale_LFS.jpg",img)

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

地摊主老袁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值