OpenCV 06(图像的基本变换)

一、图像的基本变换

1.1 图像的放大与缩小

  • resize(src, dsize, dst, fx, fy, interpolation)

  • src: 要缩放的图片

  • dsize: 缩放之后的图片大小, 元组和列表表示均可.

  • dst: 可选参数, 缩放之后的输出图片

  • fx, fy:x轴和y轴的缩放比 , 即宽度和高度的缩放比.

  • interpolation: 插值算法, 主要有以下几种:

  • INTER_NEAREST, 邻近插值, 速度快, 效果差.

  • INTER_LINEAR, 双线性插值, 使用原图中的4个点进行插值. 默认.

  • INTER_CUBIC, 三次插值, 原图中的16个点.

  • INTER_AREA, 区域插值, 效果最好, 计算时间最长.

python 复制代码
 import cv2
  import numpy as np
  
  #导入图片
  dog = cv2.imread('./dog.jpeg')
  
  # x,y放大一倍
  new_dog = cv2.resize(dog,dsize=(800, 800), interpolation=cv2.INTER_NEAREST)
  cv2.imshow('dog', new_dog)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

1.2 图像的翻转

  • flip(src, flipCode)

  • flipCode =0 表示上下翻转

  • flipCode >0 表示左右翻转

  • flipCode <0 上下 + 左右

python 复制代码
# 翻转
import cv2
import numpy as np

#导入图片
dog = cv2.imread('./dog.jpeg')

new_dog = cv2.flip(dog, flipCode=-1)
cv2.imshow('dog', new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.3 图像的旋转

  • rotate(img, rotateCode)

  • ROTATE_90_CLOCKWISE 90度顺时针

  • ROTATE_180 180度

  • ROTATE_90_COUNTERCLOCKWISE 90度逆时针

python 复制代码
# 旋转
import cv2
import numpy as np

#导入图片
dog = cv2.imread('./dog.jpeg')

new_dog = cv2.rotate(dog, rotateCode=cv2.cv2.ROTATE_90_COUNTERCLOCKWISE)
cv2.imshow('dog', new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.4 仿射变换之图像平移

  • 仿射变换是图像旋转, 缩放, 平移的总称.具体的做法是通过一个矩阵和和原图片坐标进行计算, 得到新的坐标, 完成变换. 所以关键就是这个矩阵.

  • warpAffine(src, M, dsize, flags, mode, value)

  • M:变换矩阵

  • dsize: 输出图片大小

  • flag: 与resize中的插值算法一致

  • mode: 边界外推法标志

  • value: 填充边界值

  • 平移矩阵

python 复制代码
 # 仿射变换之平移
  import cv2
  import numpy as np
  
  #导入图片
  dog = cv2.imread('./dog.jpeg')
  
  h, w, ch = dog.shape
  M = np.float32([[1, 0, 100], [0, 1, 0]])
  # 注意opencv中是先宽度, 再高度
  new = cv2.warpAffine(dog, M, (w, h))
  
  cv2.imshow('new', new)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

1.5 仿射变换之获取变换矩阵

仿射变换的难点就是计算变换矩阵, OpenCV提供了计算变换矩阵的API

  • getRotationMatrix2D(center, angle, scale)

  • center 中心点 , 以图片的哪个点作为旋转时的中心点.

  • angle 角度: 旋转的角度, 按照逆时针旋转.

  • scale 缩放比例: 想把图片进行什么样的缩放.

python 复制代码
# 仿射变换之平移
import cv2
import numpy as np

#导入图片
dog = cv2.imread('./dog.jpeg')

h, w, ch = dog.shape
# M = np.float32([[1, 0, 100], [0, 1, 0]])

# 注意旋转的角度为逆时针.
# M = cv2.getRotationMatrix2D((100, 100), 15, 1.0)
# 以图像中心点旋转
M = cv2.getRotationMatrix2D((w/2, h/2), 15, 1.0)
# 注意opencv中是先宽度, 再高度
new = cv2.warpAffine(dog, M, (w, h))

cv2.imshow('new', new)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • getAffineTransform(src[], dst[]) 通过三点可以确定变换后的位置, 相当于解方程, 3个点对应三个方程, 能解出偏移的参数和旋转的角度.

  • src原目标的三个点

  • dst对应变换后的三个点

python 复制代码
 # 通过三个点来确定M
  # 仿射变换之平移
  import cv2
  import numpy as np
  
  #导入图片
  dog = cv2.imread('./dog.jpeg')
  
  h, w, ch = dog.shape
  
  # 一般是横向和纵向的点, 所以一定会有2个点横坐标相同, 2个点纵坐标相同
  src = np.float32([[200, 100], [300, 100], [200, 300]])
  dst = np.float32([[100, 150], [360, 200], [280, 120]])
  M = cv2.getAffineTransform(src, dst)
  # 注意opencv中是先宽度, 再高度
  new = cv2.warpAffine(dog, M, (w, h))
  
  cv2.imshow('new', new)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

1.6 透视变换

透视变换就是将一种坐标系变换成另一种坐标系. 简单来说可以把一张"斜"的图变"正".

  • warpPerspective(img, M, dsize,....)

  • 对于透视变换来说, M是一个3 * 3 的矩阵.

  • getPerspectiveTransform(src, dst) 获取透视变换的变换矩阵, 需要4个点, 即图片的4个角.

python 复制代码
# 透视变换
  import cv2
  import numpy as np
  
  #导入图片
  img = cv2.imread('./123.png')
  print(img.shape)
  
  src = np.float32([[100, 1100], [2100, 1100], [0, 4000], [2500, 3900]])
  dst = np.float32([[0, 0], [2300, 0], [0, 3000], [2300, 3000]])
  M = cv2.getPerspectiveTransform(src, dst)
  
  new = cv2.warpPerspective(img, M, (2300, 3000))
  cv2.namedWindow('img', cv2.WINDOW_NORMAL)
  cv2.resizeWindow('img', 640, 480)
  
  cv2.namedWindow('new', cv2.WINDOW_NORMAL)
  cv2.resizeWindow('new', 640, 480)
  
  cv2.imshow('img', img)
  cv2.imshow('new', new)
  
  
  cv2.waitKey(0)
  cv2.destroyAllWindows()
相关推荐
说私域30 分钟前
互联网生态下赢家群体的崛起与“开源AI智能名片链动2+1模式S2B2C商城小程序“的赋能效应
人工智能·小程序·开源
董厂长4 小时前
langchain :记忆组件混淆概念澄清 & 创建Conversational ReAct后显示指定 记忆组件
人工智能·深度学习·langchain·llm
G皮T7 小时前
【人工智能】ChatGPT、DeepSeek-R1、DeepSeek-V3 辨析
人工智能·chatgpt·llm·大语言模型·deepseek·deepseek-v3·deepseek-r1
九年义务漏网鲨鱼7 小时前
【大模型学习 | MINIGPT-4原理】
人工智能·深度学习·学习·语言模型·多模态
元宇宙时间8 小时前
Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
人工智能·去中心化·区块链
开发者工具分享8 小时前
文本音频违规识别工具排行榜(12选)
人工智能·音视频
产品经理独孤虾8 小时前
人工智能大模型如何助力电商产品经理打造高效的商品工业属性画像
人工智能·机器学习·ai·大模型·产品经理·商品画像·商品工业属性
老任与码8 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
蹦蹦跳跳真可爱5898 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
雷羿 LexChien9 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt