opencv 图像的变换

图像的变换

图像的缩放

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

缩放算法

  • INTER_NEAREST,邻近插值,速度快,效果差
  • INTER_LINEAR,双线性插值,原图中的4个点
  • INTER_CUBIC,三次插值,原图中的16个点
  • INTER_AREA,效果最好,但速度较慢
import numpy as np
import cv2 as cv



dog = cv.imread('./dog.jpeg')
print(dog.shape)
# new = cv.resize(dog, (518, 442) )
new = cv.resize(dog, None, fx=2, fy=2, interpolation=cv.INTER_AREA)
cv.imshow('new', new)
cv.imshow('dog', dog)
cv.waitKey(0)

图像的翻转

flip(img,flipCode)
flipCode ==0,上下
flipCode>0,左右
flipCode<0,左右+上下

import numpy as np
import cv2 as cv


dog = cv.imread('./dog.jpeg')
new = cv.flip(dog, 0)   # 上下翻转
new2 = cv.flip(dog, 1)   # 左右翻转
new3 = cv.flip(dog, -1)   # 左右翻转+上下翻转

cv.imshow('new', new)
cv.imshow('new2', new2)
cv.imshow("original", dog)
cv.imshow("new3", new3)
cv.waitKey(0)

图像的旋转

-rotate(img,rotateCode)
ROTATE_90_CLOCKWISE 顺时针90度
ROTATE_180
ROTATE_90_COUNTERCLOCKWISE 顺时针270度(反向的90度)

import cv2 as cv
import numpy as np

dog = cv.imread('./dog.jpeg')
new = cv.rotate(dog, cv.ROTATE_90_CLOCKWISE)
cv.imshow('90', new)
cv.imshow('old', dog)
cv.waitKey(0)

图像的仿射变换

仿射变换是图像的旋转,缩放,平移的总称
仿射API

  • warpAffine(src,M,dsize,flags,mode,value)
  • M: 变换矩阵
  • dsize输出尺寸大小
  • flags:与resize中的插值算法一致
  • mode: 边界外推法标志
  • value:填充边界的值

平移矩阵

  • 矩阵中的每个像素由(X,Y)组成
  • 因此,其变换矩阵是2x2的矩阵
  • 平移向量为2X1的向量,所在平移矩阵为2x3矩阵
import cv2 as cv
import numpy as np

dog = cv.imread('./dog.jpeg')
h, w, ch = dog.shape
M = np.float32([[1, 0, 100],
              [0, 1, 0]])


new = cv.warpAffine(dog, M, (w, h), )
cv.imshow('new', new)
cv.imshow('dog', dog)
cv.waitKey(0)

变化矩阵

  • getRotationMatrix2D(center,angle,scale)
  • center中心点
  • angle角度(逆时针旋转)
  • scale缩放比例

变化矩阵(2)

getAffineTransform(src[],dst[])
通过三个点可以确定变换的位置

import cv2 as cv
import numpy as np

dog = cv.imread('./dog.jpeg')
h, w, ch = dog.shape
# M = np.float32([[1, 0, 100],
#               [0, 1, 0]])

# M = cv.getRotationMatrix2D((w/2, h/2), 15, 0.5)  # 角度为逆时针
src = np.float32([[10,10],[20,15], [10,30]])
dst = np.float32([[15,25],[30,22], [100,250]])
M = cv.getAffineTransform(src, dst)
# 如果想改变新图像的尺寸,需要修改dsize
new = cv.warpAffine(dog, M, (w, h), )

cv.imshow('new', new)
cv.imshow('dog', dog)
cv.waitKey(0)

透视变换API

  • warpPerspective(img,M,dsize)
  • M是变换矩阵
  • dsize是目标图像大小

变换矩阵

  • getPersectiveTransfrom(src,dst)
  • 四个点(图像的四个角)
import cv2 as cv
import numpy as np


img = cv.imread('2.jpg')
src = np.float32([[0,119],[121,69],[97,253],[251,150]])
dst = np.float32([[0,0],[200,0],[0,300],[200,300]])
M = cv.getPerspectiveTransform(src,dst)
new = cv.warpPerspective(img, M, (200,300))
cv.imshow('new', new)
cv.waitKey(0)

在这里插入图片描述


版权声明:本文为qq_41803556原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。