和我一起入门OpenCV with Python Day3

二、语法介绍

(二)图像处理

6. 几何学变换

  1. 缩放
cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)

参数:

  • src:输入图像
  • dsize:绝对尺寸,直接指定图像大小
  • fx/y:相对尺寸,令dsize=None,按比例
  • interpolation:插值方法

实战!


import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt


img=cv.imread("C:/Users/LEGION/Pictures/bqb/shuai.jpg")
#图像缩放


#绝对尺寸
rows,cols=img.shape[:2]#缩1/2即放大2倍
img1=cv.resize(img,(2*cols,2*rows),interpolation=cv.INTER_AREA)
#cv2.INTER_LINEAR 双线性插值法
#cv2.INTER_NEAREST 最近邻插值
#cv2.INTER_AREA 像素区域重采样(默认)
#cv2.CUBIC 双三次插值

#相对尺寸
img2=cv.resize(img,None,fx=0.3,fy=0.4)#别管我啦

fig,axes=plt.subplots(nrows=1,ncols=3,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("yuan")
axes[1].imshow(img1[:,:,::-1])
axes[1].set_title("da")
axes[2].imshow(img2[:,:,::-1])
axes[2].set_title("xiao")
plt.show()


忘记存结果了…想象一下好啦

  1. 平移
cv.warpAffine(img,M,dsize)

和我一起入门OpenCV with Python Day3_第1张图片

实战!


import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt


img=cv.imread("C:/Users/LEGION/Pictures/bqb/shu.jpg")

M=np.float32([[1,0,66],[0,1,66]])#平移矩阵
rows,cols=img.shape[:2]
img1=cv.warpAffine(img,M,(cols,rows))#先列数后行数


fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("yuan")
axes[1].imshow(img1[:,:,::-1])
axes[1].set_title("yi")

plt.show()


运行结果
和我一起入门OpenCV with Python Day3_第2张图片

  1. 图像旋转
cv2.getRotationMatrix2D(center, angle, scale)

实战!

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1 读取图像
img = cv.imread("C:/Users/LEGION/Pictures/bqb/zhu.jpg")

# 2 图像旋转
rows,cols = img.shape[:2]
# 2.1 生成旋转矩阵
M = cv.getRotationMatrix2D((cols/2,rows/2),90,1)
# 2.2 进行旋转变换
img1 = cv.warpAffine(img,M,(cols,rows))

# 3 图像展示
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("yuan")
axes[1].imshow(img1[:,:,::-1])
axes[1].set_title("zhuan")
plt.show()

和我一起入门OpenCV with Python Day3_第3张图片

  1. 仿射变换
    涉及图像形状位置角度的变换
    实战!
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1 图像读取
img = cv.imread("C:/Users/LEGION/Pictures/bqb/zhu.jpg")

# 2 仿射变换
rows,cols = img.shape[:2]
# 2.1 创建变换矩阵
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[100,100],[200,50],[100,250]])
M = cv.getAffineTransform(pts1,pts2)
# 2.2 完成仿射变换
img1 = cv.warpAffine(img,M,(cols,rows))

# 3 图像显示
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("yuan")
axes[1].imshow(img1[:,:,::-1])
axes[1].set_title("she")
plt.show()

运行结果:
和我一起入门OpenCV with Python Day3_第4张图片

  1. 透射变换
    视角变化
cv.warpPerspective(img,T,(cols,rows))

参数:

  • T:透射对应的变换矩阵(几个顶点投到对应顶点坐标,看实战理解)

实战!

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1 读取图像
img = cv.imread("C:/Users/LEGION/Pictures/bqb/zhu.jpg")
# 2 透射变换
rows,cols = img.shape[:2]
# 2.1 创建变换矩阵
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[100,145],[300,100],[80,290],[310,300]])

T = cv.getPerspectiveTransform(pts1,pts2)
# 2.2 进行变换
img1 = cv.warpPerspective(img,T,(cols,rows))

# 3 图像显示
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("yuan")
axes[1].imshow(img1[:,:,::-1])
axes[1].set_title("tou")
plt.show()

运行结果:
和我一起入门OpenCV with Python Day3_第5张图片

  1. 图像金字塔
    金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似,层级越高,图像越小,分辨率越低。
cv.pyrUp(img)       #对图像进行上采样
cv.pyrDown(img)        #对图像进行下采样

实战

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1 读取图像
img = cv.imread("C:/Users/LEGION/Pictures/bqb/zhu.jpg")
# 2 进行图像采样
up_img = cv.pyrUp(img)  # 上采样操作:变大,分辨率高
img_1 = cv.pyrDown(img)  # 下采样操作
# 3 图像显示
cv.imshow('enlarge', up_img)
cv.imshow('original', img)
cv.imshow('shrink', img_1)
cv.waitKey(0)
cv.destroyAllWindows()


运行结果:
和我一起入门OpenCV with Python Day3_第6张图片
本次博客参考https://blog.csdn.net/qq_45066628/article/details/119353123
侵删

你可能感兴趣的:(opencv,with,python,python,opencv,计算机视觉)