OpenCV快速入门十:图像的基本变换

一、放缩

1、函数API

def resize(InputArray src,
OutputArray dst,
Size dsize,
double fx = 0,
double fy = 0,
int interpolation = INTER_LINEAR
)

src:原图像;
dsize:缩放后的图像大小;
dst:目标图像,但是在 Python 里面没有任何意义。一般不传参或者设成 None;
fx, fy:: 和 y 方向上的缩放比例;
interpolation:插值方式;
常见的插值缩放算法:
OpenCV快速入门十:图像的基本变换_第1张图片

2、代码演示

import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')
#若fx.fy也写了优先使用dsize (x,y)
new = cv2.resize(dog,None, fx=0.3, fy=0.3, interpolation=cv2.INTER_AREA)
#shape(y,x,channels)
print(dog.shape)

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

二、翻转

1、函数API

def resize(InputArray src,flipcode)

src:输入图像;
flipcode:翻转类型。
OpenCV快速入门十:图像的基本变换_第2张图片

2、代码演示

import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')
new = cv2.flip(dog, 0)
new2 = cv2.flip(dog, 1)
new3 = cv2.flip(dog, -1)

cv2.imshow('new', new)
cv2.imshow('dog', dog)
cv2.imshow('new2', new2)
cv2.imshow('new3', new3)
cv2.waitKey(0)

三、旋转

1、函数API

def resize(InputArray src, rotateCode)

src:输入图像;
rotateCode:旋转方式,如下:
OpenCV快速入门十:图像的基本变换_第3张图片

2、代码演示

import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')
new = cv2.rotate(dog, cv2.ROTATE_90_CLOCKWISE)#顺时针90°
new2 = cv2.rotate(dog, cv2.ROTATE_180)

cv2.imshow('dog', dog)
cv2.imshow('new', new)
cv2.imshow('new2', new2)
cv2.waitKey(0)

四、仿射变换

仿射变换说白了就是图像缩放、平移、旋转的总称。

1、仿射变换API

def warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None)

src:输入图像;
M:运算矩阵,2行3列的;
dsize:运算后矩阵的大小,也就是输出图片的尺寸;
dst:输出图像;
flags:插值方法的组合,与resize函数中的插值一样,可以查看cv2.resize;
borderMode:边界像素外推方法;
borderValue:在恒定边框的情况下使用的borderValue值;默认情况下,它是 0。

2、平移

OpenCV快速入门十:图像的基本变换_第4张图片

3、变换矩阵API

def getRotationMatrix2D (Point2f center, double angle, double scale)

center:源图像中的旋转中心;
angle:以度为单位的旋转角度。 正值表示逆时针旋转(假设坐标原点为左上角);
scale:缩放比例。

4、代码演示

import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')
h, w, ch = dog.shape
#M = np.float32([[1, 0, 500], [0, 1, 300]])#x加500(右移),y加300  保证32位
# 旋转的角度为逆时针
# 中心点是 (x,y)
#M = cv2.getRotationMatrix2D((w/2, h/2), 15, 1.0)#15-逆时针旋转角度 1原尺寸
src = np.float32([[400, 300], [800, 300], [400, 1000]])
dst = np.float32([[200, 400], [600, 500], [150, 1100]])
#不明确角度
M = cv2.getAffineTransform(src, dst)#原坐标   现坐标  最好三个点

#如果想改变新图像的尺寸,需要修改dsize
new = cv2.warpAffine(dog, M, (w, h))

print(dog.shape)

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

五、透视变换

1、函数API

def warpPerspective(InputArray src,OutputArray dst, InputArray M,Size dsize,int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT,const Scalar& borderValue=Scalar())

src:输入的图像;
dst:输出的图像;
M:透视变换的矩阵;
dsize:输出图像的大小;
flags=INTER_LINEAR:输出图像的插值方法;
borderMode:像素外推法(BORDER_CONSTANT 或 BORDER_REPLICATE);
borderValue ​:在边界不变的情况下使用的值; 默认情况下,它等于 0。

2、变换矩阵

def getPerspectiveTransform(InputArray src,InputArray dst);

src:源图像四边形顶点坐标;
dst:目标图像对应的四边形顶点坐标。

3、代码演示

import cv2
import numpy as np

img = cv2.imread(r"C:\Users\DMr\Pictures\text\perspective.jpeg")

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.imshow('orgin', img)
cv2.imshow('new', new)
cv2.waitKey(0)
cv2.imwrite('./math.png', new)

输出
OpenCV快速入门十:图像的基本变换_第5张图片

每日“大饼”:
人生的意义永远在于拓展 而不在于固守 别管我今天是谁 我想成为一个更好的自己

你可能感兴趣的:(OpenCV学习,1024程序员节)