图像处理——基于opencv和python(二)

本文详细介绍了如何使用OpenCV进行图片的读取(包括彩色和灰度)、保存,并展示了使用Matplotlib和Pillow库对图片进行显示和处理的方法。重点讲解了cv2.imread()和cv2.imshow()函数以及相关参数的使用。
摘要由CSDN通过智能技术生成

OpenCV读取和写入

1.1 读取、保存图片

使用cv.imread()函数读取图像。在第1个位置参数传入图像文件的路径,如果读取文件成功返回一个numpy数组,如果获取失败将返回None。第二个参数是一 个标志,它指定了读取图像的方式。图像应该在工作目录或图像的完整路径应给出

  • cv.IMREAD_COLOR: 加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。
  • cv.IMREAD_GRAYSCALE:以灰度模加载图像
  • cv.IMREAD_UNCHANGED:加载图像,包括alpha通道.

注意 除了这三个标志,你可以分别简单地传递整数1、0、None。 

OpencCV支持 JPG、PNG、TIFF 等常见格式图像文件加载(默认读取的格式是 BGR)。

这里需要注意的是获取图像失败并不会抛异常,而是得到一个None,后面的imshow(),imwrite()等方法如果直接使用反而会导致异常。

###加载图像
import numpy as np
import cv2
print ('----------------Hello OpenCv----------------')
img = cv2.imread('./images/lena.jpg',1) # 默认为1,表示按照BGR三通道方式进行读取,0则以灰度图单通道方式进行读取。
cv2.imshow('input image',img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('q'): # wait for 'q' key to save and exit
    cv2.imwrite('./images/lena_gray.png',img)
    cv2.destroyAllWindows()
  • cv2.waitKey(time)表示图片延时
  • 在time时间内,等待键盘上的命令,没有则进入下一帧。没有下一帧,则是自动关闭窗口。
  • 将time设置为0,cv2.waitKey(0) 表示停止在当前帧,有按键指令才会进入下一帧。显示单张图片设置为cv2.waitKey(0)。
  • 通过if语句控制程序关闭
    • 当按下 Esc 键退出程序或者按下指定的 q 键退出窗口,其它键不会退出窗口。
    • 通过if控制,按下任何键都会关闭。
  • 在调试过程中如果显示的窗口过多时
    • 可以使用destroyWindow(窗口名称)单独关闭某个显示窗口
    • 也可以使用destroyAllWindows()关闭所有显示窗口
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

使用函数 cv.imshow() 在窗口中显示图像。窗口自动适合图像尺寸。 第一个参数是窗口名称,它是一个字符串。第二个参数是我们的对象。你可以根据需要创建任意多个窗口,但可以使用不同的窗口名称。

cv2.imwrite('./images/lena_copy.png',img)

使用函数cv.imwrite()保存图像。 第一个参数是文件名,第二个参数是要保存的图像。 这会将图像以PNG格式保存在工作目录中

1.2 查看图片属性

图片是numpy数据类型的ndarray,三个维度的,比如 [H,W,C] 可以参照Numpy数据操作。

type(img),img.shape,img.size

5c64569adf6340bea748e6d8c9038f58.png

1.3 调整窗口nameWindow()、resizeWindow()

使用imshow()方法显示图像时,默认是以图像的像素大小显示的.

可以通过nameWindow(窗口名称,cv2.WINDOW_NORMAL)命名窗口,

再使用resizeWindow(窗口名称,窗口宽度,窗口高度)缩放窗口,

最后使用imshow()显示图像,注意三者都在同一个窗口名称上操作

6c891f36cb77437fa64c2b0c535fbdba.png

1.4 使用Matplotlib或Image显示图片

Matplotlib是Python的绘图库,可为你提供多种绘图方法。可以使用Matplotlib缩放图像,保存图像等。

plt.imshow 是 Matplotlib 库中用于显示图像的函数,

它的常见参数包括:

X:要显示的图像数据。可以是一个二维数组,也可以是三维数组,表示RGB图像。如果是二维数组,灰度图像将会被创建;如果是三维数组,则每个通道 将会被解释为一个颜色通道。

cmap:colormap,指定了图像使用的颜色映射。例如,'gray' 表示灰度图像,'viridis' 表示一种常见的彩色映射。你也可以传递自定义的 colormap 对象。

interpolation:插值方法,用于确定如何在图像的像素之间插值显示。常见的取值包括 'nearest'、'bilinear' 等。

aspect:'auto' 或 'equal',控制图像的纵横比。 除了这些主要参数外,还有许多其他参数可以用来调整图像的显示效果。

import cv2
from matplotlib import pyplot as plt
img = cv2.imread('./images/yanzu.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
#plt.xticks([]), plt.yticks([]) # 隐藏 x 轴和 y 轴上的刻度值
plt.show()

24339bcce3044effaec925bf1ca43204.png

在使用 Python Imaging Library (PIL) 或其 fork 库 Pillow 时,可以使用 Image.fromarray 方法将 NumPy 数组转换为图像。

常见的参数包括:

array:要转换为图像的 NumPy 数组。

mode:指定图像的模式。例如,'L' 表示灰度图像,'RGB' 表示真彩色图像。

pallete:调色板,用于指定调色板模式的图像的颜色表。

除了这些主要参数外,

Image.fromarray 方法还可以接受一些其他参数,具体取决于所使用的库和版本。常见的用法是直接传入 NumPy 数组和图像模式来创建 对应的图像对象

 

 

  • 31
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值