我们先简单复习一下:
用了显示函数cv2.imshow,为了世界和平[joke],我们后面必须加上cv2.waitKey(0);cv2.destroyAllWindows()这两句话


也就是说,这三句代码是一套的:

cv2.imshow("homework", peppers_img)

cv2.waitKey(0)
cv2.destroyAllWindows()

图片resize,就是重新调整他的大小的意思,先猜一下,openCV里resize 的函数函数名字叫什么?

没错,就是cv2.resize,他有两个主要的参数src, dsize(下面讲)

另一个重要参数是interpolation,但我们今天不讲,这里简单提一下,interpolation是你要选择的插值方式,你可能要问,什么是插值,我举个简单的例子,如果你要将一张图片变大,像素变多,但是原图片的像素点就那么多,剩下来的像素点从何而来呢?这就用到了我们的插值方法,所谓插值,就是在值之间插入其他值的意思。

当然还有其他参数,我们之后会慢慢讲到,不着急

cv2.resize(src, dsize)
# src 就是你的原图片
# dsize 是你要调整的大小

# 该函数会返回被 resize 的图片

来个实例(↓实验图片↓):
阚清子.jpg
清柠摘自清子博客:[https://weibo.com/kanqingzi13...]

# 导入openCV库
import cv2 
# 读取图片
src = cv2.imread('./kqz.jpg')
# 我们看一看图片的大小
print(src.shape)   # <---(1)
# 将图片 resize 
img_resize = cv2.resize(src, (280, 400)) # <---(2)
# 将 resize 的图片展示出来
cv2.imshow("img_resize", img_resize)
# 等待按键则执行下一句话
cv2.waitKey(0)
# 关闭openCV打开的所有窗口
cv2.destroyAllWindows()
# 显示resize 图片的shape
print(img_resize.shape) # <---(3)

(1). 你可能不理解src.shape什么意思,之后会细说,这里也是简单提一下,src是我们的图片,也可以说是图片对象,对,就是面向对象编程的对象,这个对象他有个属性(可以理解为特点),这个属性就是我们这里提到的shape,shape嘛,就是形状,也就是说,src.shape就是图片形状的意思,说白了就是图片有几维,每一维有多少像素点
(实际上,图片是 numpy 中的 ndarray类的实例对象)

(2). cv2.resize函数第一个参数是你的图片,第二个参数是图片的形状,即宽高,宽有多少个像素点,高有多少个像素点,在这里,我们将参数传为(280, 400),意思是,新图片的宽为280像素,高为400像素
大幅度发.png

(3). 运行代码,你会发现,打印为(400, 280, 3),那么问题来了,我们刚刚在cv2.resize中传入的形状明明是(280, 400),怎么变成了这个?

  • 我们先说那个3,一般彩色图片都是RGB色域(关于色域以后会说)的,所有有3个通道,代表RGB三个通道的的灰度值
  • (280, 400)是宽为280像素,高为400像素,但是在上文的图片对象中,由于图片存储是以灰度图矩阵形式,而矩阵的话,讲究先行后列,也就是它的第一维是"高"方向,第二维是"宽"方向,(第三维是RGB方向)
  • 所以,高应该放在第一维度,宽为第二维度

大幅度发.png


王尼玛
373 声望13 粉丝

此号作废!