前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【图像篇】OpenCV图像处理(七)---图像平移VS图像旋转

【图像篇】OpenCV图像处理(七)---图像平移VS图像旋转

作者头像
用户5410712
发布2022-06-01 19:08:28
1.1K0
发布2022-06-01 19:08:28
举报
文章被收录于专栏:居士说AI

牛顿第一运动定律:物体加速度的大小跟作用力成正比,跟物体的质量成反比,且与物体质量的倒数成正比;加速度的方向跟作用力的方向相同。该定律是由艾萨克·牛顿在1687年于《自然哲学的数学原理》一书中提出的。

前言

在上期的文章(【图像篇】OpenCV图像处理(六)---图像混合VS按位运算)中,我们学习了图像混合的实际操作,其实就是图像按照不同权重的叠加,今天我们继续来学习别的图像处理知识点-图像平移VS图像旋转。

图像平移

一、图像平移简介

简单的说图像平移就是对图像像素进行操作,从而实现图像左右上下平移的功能,其实图像平移也是属于仿射变换的一种,我们接着往下看。

1.1 原始图像

1.1 代码实践

代码语言:javascript
复制
# 导入opencv包
import cv2
# 导入numpy包进行科学运算
import numpy as np
# opencv读取图片数据
img = cv2.imread('ys.jpg')

# 获取图像的高度和宽度 为后面的平移做准备
img_height = img.shape[0]
img_width = img.shape[1]

# 显示原始图像 与新图像进行对比
cv2.imshow("img", img)

# 定义变换矩阵 向左平移5个像素, 向上平移50个像素
# 注意这两个坐标的第一维度和第二维度不要改动
# 第三维才是要平移的参数
temp = np.float32([[1, 0, -5], [0, 1, -20]])
# 进行2D 仿射变换(平移变换)
new_image = cv2.warpAffine(img, temp, (img_width, img_height))
# 显示新图像
cv2.imshow("new_image", new_image)
#等待任意按键按下
cv2.waitKey(0)
cv2.destroyAllWindows()

代码解读:

在上面的代码中,主要注意这个函数:

代码语言:javascript
复制
cv2.warpAffine(img, temp, (img_width, img_height))

有三个参数,第一个是需要平移的图像,第二个是图像平移的信息(左移,上移等等),第三个就是图像原始的宽度和高度。

1.1 效果展示

图像旋转

二、图像旋转

图像旋转顾名思义就是将图像按照一个对称点进行某个度数的旋转,可以使顺时针,也可以是逆时针,下面来看看实战吧。

2.1 原始图像

2.2 代码实践

代码语言:javascript
复制
# -*- coding: utf-8 -*- 
# 导入各种函数包
import numpy as np
import cv2
from math import cos,sin,radians
from matplotlib import pyplot as plt

# 读入图像数据
img = cv2.imread('TaM.jpg')

# 获取图像的高度和宽度 为后面的旋转做准备
img_height = img.shape[0]
img_width = img.shape[1]

# 获取图像中点, 作为旋转的中心点
# 此处 用int是因为单纯的/2得到的不是整数
# 因此也可以直接//2 就可以不用int来变换了
cx = int(img_width / 2)
cy = int(img_height / 2)

cv2.imshow("img", img)


# 确定旋转的中心点
center = (cx, cy)

image_dim = (img_width, img_height)

# 进行2D 仿射变换
# 围绕原点 逆时针旋转40度
M = cv2.getRotationMatrix2D(center=center,angle=40, scale=1.0)
rotated_40 = cv2.warpAffine(img, M, image_dim)
cv2.imshow("rotated_40", rotated_40)

# 围绕原点 逆时针旋转50度
M = cv2.getRotationMatrix2D(center=center,angle=50, scale=1.0)
rotated_50 = cv2.warpAffine(img, M, image_dim)
cv2.imshow("rotated_50", rotated_50)

# 围绕原点  逆时针旋转70度
M = cv2.getRotationMatrix2D(center=center,angle=70, scale=1.0)
rotated_70 = cv2.warpAffine(img, M, image_dim)
cv2.imshow("rotated_70", rotated_70)

#等待任意按键按下
cv2.waitKey(0)
cv2.destroyAllWindows()

代码解读:

在上面的代码中,我们主要关注这个函数:

代码语言:javascript
复制
cv2.getRotationMatrix2D(center=center,angle=70, scale=1.0)

注意其参数的设置,分别是中心点,角度,规模(尺寸)设置 ,这里已经在注释中写的很明白了,大家好好看看一定没问题的。

2.代码扩展

上面的的代码是否有些冗长呢?可以看到我们coding了三个几乎同样的代码去实现不同度数的图像旋转,那么我们是否可以直接采用一个函数,只是传入的参数(角度)不同,就可以实现任意度数的图像旋转呢?答案是肯定的,我们采用带有参数的函数形式就好了,一起来看看吧。

代码语言:javascript
复制
# -*- coding: utf-8 -*- 
# 导入各种函数包
import numpy as np
import cv2
from math import cos,sin,radians
from matplotlib import pyplot as plt

def image_Rotation(image, rotation):
    # 读入图像数据
    img = cv2.imread(image)
        # 获取图像的高度和宽度 为后面的旋转做准备
    img_height = img.shape[0]
    img_width = img.shape[1]

    # 获取图像中点, 作为旋转的中心点
    # 此处 用int是因为单纯的/2得到的不是整数
    # 因此也可以直接//2 就可以不用int来变换了
    cx = int(img_width / 2)
    cy = int(img_height / 2)

    cv2.imshow("img", img)


    # 确定旋转的中心点
    center = (cx, cy)

    image_dim = (img_width, img_height)

    # 进行2D 仿射变换
    M = cv2.getRotationMatrix2D(center=center,angle=rotation, scale=1.0)
    rotated_img = cv2.warpAffine(img, M, image_dim)
    cv2.imshow("rotated_img_{}".format(rotation), rotated_img)
    # #等待任意按键按下
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__ == '__main__':
    # 给出image参数值:图像路径
    image = './TaM.jpg'
    # 给出rotation参数值:旋转度数
    rotation = 60
    image_Rotation(image, rotation)
    print("finished")

3.扩展代码后的效果演示

2.3 效果展示

结语

今天的分享结束了,代码量不是很多,理解还是要花点时间的,图像平移和旋转都是类似的像素空间操作,大家自行体会哦,另外,大家可以发现,小编的文章在数学知识上讲的比较少,一方面是小编的时间有限,更重要的方面是图像的数学知识涉及到微积分,矩阵等知识,有时候讲了,大家可能不太好理解,因此小编就讲的比较少,后面可能多讲一点,如果大家有不懂的涉及图像的数学知识,请私聊小编,我们一起来解决,好了,我们下期再见!

编辑:玥怡居士|审核:小圈圈居士

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT进阶之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档