[D08] OpenCV 影像旋转

因为旋转时需要以某个点为旋转中心,这边需要特别用由 OpenCV 提供的shape函式找出图片的长与宽,才能进行後续动作~

旋转时会用到 cv2.getRotationMatrix2D 这个函式! 括号里面

  • 第一个参数代表旋转中心
  • 第二个参数是旋转角度(-顺时针/+逆时针)
  • 第三个参数是图片的缩放比例
import cv2

img = cv2.imread('img.jpg')
(h, w, d) = img.shape      # 读取图片大小
print(img.shape)
center = (w // 2, h // 2)  # 找到图片中心
    
M = cv2.getRotationMatrix2D(center, 20, 1.0)  #旋转20度(逆时针)
 # 处理旋转过後的图片
rotate_img = cv2.warpAffine(img, M, (w, h)) 
cv2.imshow("Result", rotate_img)

cv2.waitKey(0)
cv2.destroyAllWindows()

执行结果:

因为图片在旋转过後会有被裁掉的地方 → 用cv2.warpAffine函式处理:

图像的旋转加上拉升就是图像仿射变换,仿射变化需要一个 M 矩阵就可以,但是由於仿射变换比较复杂,一般直接找很难找到这个矩阵。
opencv 提供了根据变换前後三个点的对应关系来自动求解 M。
函数输出的就是模拟射位置矩阵 M!


<<:  Day 08 : 操作基础篇 5 - 如何调整 Obsidian App 设定档? 让 Obsidian App 拥有自己的外观主题与插件

>>:  Day8 - 条件,重复,回圈与互动 - 回圈搭配配条件判断绘图

Day08:协作与沟通

PM 设计 前後端 ...

未知的第三天 - Nuxt 初始化

今天我们要来创立第一个 Nuxt 的专案啦 首先先在电脑内安装套件,并且建立第一个专案 npm in...

【从实作学习ASP.NET Core】Day23 | 前台 | Session 购物车 (1)

接下来要来做购物网站比较核心的内容了,从购物车到付款结帐内容比较多也比较连贯,这边应该会多分几天出来...

Day16 - 【概念篇】OAuth flows: Refresh Token

本系列文之後也会置於个人网站 +--------+ +---------------+ | |--...

D17 - 「脉冲×宽度×调变」:PWM 功能

先从 Firmata 找到类比相关功能。 PWM 在 Supported Modes 中,可以看到所...