昨晚渝海棠吃火锅太燥,今早便约了Tan去春满楼吃些清淡的Brunch,可惜天气太热海岸观景位没法坐,少了些风味。
来看一下今天的代码。
0. 准备图片
将此图片下载到本地(2017年初摄于普吉岛奈汉海滩),并存放在 $WORKSPACE/res/res00.jpg
1. 进入环境
根据上一篇介绍《第零篇 Mac上超简单安装》,我们使用Anaconda来管理环境与依赖,所以首先进入上一篇中已经建立好的环境。
$ source activate opencv
这一步仅仅只是为了使得 import cv2
能正常运行,如果你使用其他依赖管理,也可以用自己的方式(未来教程我将忽略此步骤)。
2. 加载并显示图片
创建 $WORKSPACE/helloworld.py
,编写代码:
import cv2
image = cv2.imread('res/res00.jpg') # 读取图片到内存,注意文件地址
cv2.imshow('Phuket Island', image) # 在窗口中显示图片,第一个参数是窗口名称
cv2.waitKey() # 按任意键继续
然后执行:
python helloworld.py
即可看到弹出的窗口,效果如下:
可能的问题
1. 尺寸问题
如果你的屏幕恰好和我一样很小,会发现展示图片的窗口很大,无法在屏幕上展示完整,那么我们就需要resize了,代码如下:
import cv2
image = cv2.imread('res/res00.jpg')
(rows, cols, channels) = image.shape # 获取图片尺寸信息
(scrWidth, scrHeight) = (1280, 720) # 屏幕大小,即图片最大尺寸
scale = min(scrWidth / cols, scrHeight / rows) # 计算最大缩小比例
resized = cv2.resize(image, (int(cols * scale), int(rows * scale))) # 长宽等比缩小
cv2.imshow('Phuket Island', resized)
cv2.waitKey()
解释:
- 首先想象图片是一个矩阵(包括行列),图片的宽度是矩阵的列数(cols),图片的高度是矩阵的行数(rows),图片中每个像素用多少维度表示既是矩阵的通道(channel),以上后面章节会有详细讲解;
image.shape
返回3个值,分别是矩阵的行数、列数、通道数;- 按照宽高与屏幕的比例,取
scale
(缩放因子)最小的值; - 建立目标尺寸
(int(cols * scale), int(rows * scale))
传递给cv2.resize
函数。