Python专辑机器学习与计算机视觉图像处理

Python和OpenCV中的基本图像操作:缩放、旋转和剪裁

2017-06-12  本文已影响3365人  luohuayong

在开始代码前需要先安装Python2.7和Opencv2/Opencv3。具体安装方式可以看OpenCV官网,或者百度。这里不做详细介绍。

我们使用侏罗纪公园视频的一张截图为例子:

图1 侏罗纪公园截图

首先我们加载图像并将其显示在屏幕上:

# 导入需要的包
import cv2

# 载入图像并显示
image = cv2.imread("jurassic-park-tour-jeep.jpg")
cv2.imshow("win", image)
cv2.waitKey(0)

执行这段代码,我们可以看到这样的结果:

图2 载入并显示图片

分析下上面的代码:

# 输出图像尺寸
print image.shape

执行该代码,我们看到(388,647,3)输出到控制台。这表示这个图像有388行,647列以及3个颜色通道(RGB)。

提示:当我们获取图像尺寸时,获取的是(行,列,颜色通道)这样的值。但是我们在指定图像尺寸时,我们应该给出(列,行)这样的值,顺序是有差别的。这可能会造成一些混乱,我们自己要记清楚。

现在我们知道图像的宽度是647像素,我们将宽度调整为100像素:

# 保持图片的宽高等比例缩放,以保证图片显示不变形
# 计算新图片相对于旧图片的比例
r = 100.0/image.shape[1]
dim = (100, int(image.shape[0]*r))

# 执行图片缩放,并显示
resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)
cv2.imshow("resized", resized)
cv2.waitKey(0)

执行代码,我们看到新的图像只有100像素宽:

图3 将图像调整为100像素宽

分析下代码:

接下来,我们旋转图片:

# 获取图片尺寸并计算图片中心点
(h, w) = image.shape[:2]
center = (w/2, h/2)

# 将图像旋转180度
M = cv2.getRotationMatrix2D(center, 180, 1.0)
rotated = cv2.warpAffine(image, M, (w, h))
cv2.imshow("rotated", rotated)
cv2.waitKey(0)

运行结果:

图4 图片被翻转180度

我们看下代码:

我们再来做一个图像的部分截图:

# 使用numpy数组切片对图像进行剪裁
cropped = image[70:170, 440:540]
cv2.imshow("cropped", cropped)
cv2.waitKey(0)

执行后的效果:


图5 对图像进行剪裁

在OpenCV中进行图像剪裁非常简单,我们所作的就是切片数组。在Y轴上给出startY和endY,在X轴上给出startX和endX,然后切面。
最后一个例子,我们将剪裁的图像保存到磁盘,并保存为PNG格式(原图是JPG格式):

# 将剪切后的图片以PNG格式保存至磁盘
cv2.imwrite("thumbnail.png", cropped)

这里,我们提供的第一个参数是文件的路径,第二个参数是要保存的图像。OpenCV会根据我们给出的文件后缀名,自动生成保存的文件格式。

上一篇 下一篇

猜你喜欢

热点阅读