前言:总纲请查看《计算机视觉学习路》缩放
resize(src , dst , dsize , fx , fy , interpolation)
源,目的–python中不需要dst这个参数,目标的大小,x,y轴的缩放因子,插值算法
如果设置了dsize,就不需要设置fx,fy,二者选其一
插值算法:临近插值INTER_NEAREST,双线性插值(默认)INTER_LINEAR,三次插值INTER_CUBIC,INTER_AREA插值
import cv2
import numpy as npimg = cv2.imread('../img/ex03.jpg')
print(img.shape)#676 1202 3
# 缩放成指定大小
new = cv2.resize(img,(400,400))
# 按fx,fy缩放:三次插值
new2 = cv2.resize(img,None,fx=0.3,fy=0.3,interpolation=cv2.INTER_CUBIC)cv2.imshow('img',img)
cv2.imshow('new',new)
cv2.imshow('new2',new2)cv2.waitKey(0)
翻转
flip(img , flipCode) # flipCode=0 上下翻转; >0 左右翻转 ; <0 上下+左右翻转
import cv2img = cv2.imread('../img/ex03.jpg')
img = cv2.resize(img,None,fx=0.5,fy=0.5)# 上下翻转
img1 = cv2.flip(img, 0)# 左右翻转
img2 = cv2.flip(img, 1)# 上下加左右
img3 = cv2.flip(img, -1)cv2.imshow('img', img)
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)cv2.waitKey(0)
旋转
rotate(img, rotateCode)
rotateCode:
ROTATE_90_CLOCKWISE , 旋转90度
ROTATE_180 , 旋转180度
ROTATE_90_COUNTERCLOCKWISE , 旋转270度(反向旋转90度)
import cv2img = cv2.imread('../img/ex03.jpg')
img = cv2.resize(img, None, fx=0.5, fy=0.5)img1 = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
img2 = cv2.rotate(img, cv2.ROTATE_180)
img3 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)cv2.imshow('img', img)
cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)cv2.waitKey(0)
仿射变换
仿射变换是图像旋转、缩放、平移的总称
warpAffine(src , M , dsize , flags , mode , value)
M:变换矩阵平移
dsize 输出大小
flag 和resize中的插值算法一致
mode 边界外推法
value 填充边界的值
文章图片
import cv2
import numpy as npimg = cv2.imread('../img/ex03.jpg')
img = cv2.resize(img, None, fx=0.5, fy=0.5)# 向右平移100个点
M = np.float32([[1, 0, 100], [0, 1, 0]])
h,w,c = img.shape
img1 = cv2.warpAffine(img,M,(w,h))cv2.imshow('img', img)
cv2.imshow('img1', img1)cv2.waitKey(0)
变换矩阵 简单的平移矩阵我们可以自己指定,如果变化复杂,我们怎么获得变换矩阵呢?
getRotationMatrix2D(center , angle , scale)
center : 中心点
angle : 角度(逆时针)
scale : 缩放比例
文章图片
import cv2
import numpy as npimg = cv2.imread('../img/ex03.jpg')
img = cv2.resize(img,None,fx=0.5,fy=0.5)
h,w,c = img.shape#获取变换矩阵M
M = cv2.getRotationMatrix2D((w/2,h/2),60,1.0)# 不改变原图的尺寸所以传入(w,h)
img1 = cv2.warpAffine(img,M,(w,h))cv2.imshow('img', img)
cv2.imshow('img1', img1)cv2.waitKey(0)
还可以通过变换前后点的坐标获取变换矩阵(三个点可以确定)
getAffineTransform(src[ ], dst[ ])
文章图片
import cv2
import numpy as npimg = cv2.imread('../img/ex03.jpg')
h, w, c = img.shapesrc = https://www.it610.com/article/np.float32([[400,300],[800,300],[400,1000]])
dst = np.float32([[200,400],[600,500],[150,1100]])
# 第二种获取仿射变化图片的方法:通过变换前后点的坐标
M = cv2.getAffineTransform(src,dst)img1 = cv2.warpAffine(img, M, (w, h))cv2.imshow('img', img)
cv2.imshow('img1', img1)cv2.waitKey(0)
透视变换
warpPerspective(img , M , dsize, …)获取变换矩阵:
getPersectiveTransform(src , dst) # 需要四个坐标点(图形的四个角)【计算机视觉|OpenCV_05图像变换】
文章图片
import numpy as np
import cv2im = cv2.imread('../img/pers.png')
h, w = im.shape[:2]# 取出高度和宽度# 设置透视变换的原点和目标点
pts1 = np.float32([[58, 2], [167, 9], [8, 196], [126, 196]])# 输入图像四个顶点坐标
pts2 = np.float32([[16, 2], [167, 8], [8, 196], [169, 196]])# 输出图像四个顶点坐标# 生成透视变换矩阵
M = cv2.getPerspectiveTransform(pts1,# 输入图像四个顶点坐标
pts2)# 输出图像四个顶点坐标# 执行透视变换
dst = cv2.warpPerspective(im, M, (w, h))cv2.imshow('im', im)
cv2.imshow('dst', dst)cv2.waitKey()
cv2.destroyAllWindows()
推荐阅读
- python|一文述说人工智能(AI)发展史,几经沉浮!
- 算法|计算机视觉近10年发展回顾与未来发展方向
- python模块
- Python统计中的68-95-99.7规则
- Python3中级主题快速入门
- Python 3基础快速入门介绍
- Python __iter__()和__next__()将对象转换为迭代器
- Python __import__()函数用法介绍
- Pyspark(使用Apache MLlib的线性回归)