水面倒影效果
概要
我们会使用 Matplotlib 的 pyplot
模块创建图并显示图像:
用以下魔术命令,以便将图像显示在笔记本中而不是在新的显示窗口中:
如果要显示彩色图像,可以使用以下命令将图像从 BGR
转换为 RGB
。
最后使用 plt.show()
命令显示图像。
import matplotlib.pyplot as plt%matplotlib inline
实验目标
实现一个水面过滤器,该过滤器负责垂直翻转漂浮在水体上的对象。可以在下图中看到这种效果:
实验内容
import cv2
import numpy as np
import matplotlib.pyplot as plt # 使用以下魔术命令,以便将图像显示在notebook中
%matplotlib inline# 读取图像
zebra = cv2.imread('./zebra.jpg') # BGR格式
print(zebra.shape) # 查看现状
hight, width = zebra.shape[:2] # 存储图像高和宽
plt.imshow(zebra[:,:,::-1]) # 将BGR格式转为RGB,显示图像# 创建新的图片,height为原图两倍,数据类型为uint8, 全0填充
new_zebra = np.zeros((2*hight, width, 3), dtype='uint8')
print(new_zebra.shape) # 查看现状
plt.imshow(new_zebra[:,:,::-1])# 原图copy到上半部分
new_zebra[:hight, :width, :] = zebra
plt.imshow(new_zebra[:,:,::-1])# 原图上下倒置copy到下半部分
new_zebra[hight:, :width, :] = zebra[::-1, :, :] # y方向上实现上下倒置, 你也可以试试实现左右倒置
plt.imshow(new_zebra[:,:,::-1])# 保存图片
cv2.imwrite('./new_zebra.jpg', new_zebra)
原图:
新创建图:
原图copy到上半部分:
结果:
结语
在本实验我们利用了NumPy 、cv2的结合实现图像镜面效果。