【OpenCV Python入门书】第一篇 HelloWorld

昨晚渝海棠吃火锅太燥,今早便约了Tan去春满楼吃些清淡的Brunch,可惜天气太热海岸观景位没法坐,少了些风味。

来看一下今天的代码。

0. 准备图片

将此图片下载到本地(2017年初摄于普吉岛奈汉海滩),并存放在 $WORKSPACE/res/res00.jpg
2017年初普吉岛奈汉海滩

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()

解释:

  1. 首先想象图片是一个矩阵(包括行列),图片的宽度是矩阵的列数(cols),图片的高度是矩阵的行数(rows),图片中每个像素用多少维度表示既是矩阵的通道(channel),以上后面章节会有详细讲解;
  2. image.shape 返回3个值,分别是矩阵的行数、列数、通道数;
  3. 按照宽高与屏幕的比例,取 scale (缩放因子)最小的值;
  4. 建立目标尺寸 (int(cols * scale), int(rows * scale)) 传递给 cv2.resize 函数。

猜你喜欢

转载自blog.csdn.net/lionguo0204/article/details/80717945