opencv-图像的几何变换小结
resize/transpose/flip
。src 输入图
。dst 输出图,形态和输入图相同,当dsize不等于0,输出图尺寸会和dsize相同,当dsize等于0,输出图尺寸会由输入图尺寸、fx、fy计算而得
。dsize 输出尺寸,当输入为0时,fx、fy皆不可为0,dsize = Size(round(fxsrc.cols),round(fysrc.rows))
。fx 水平缩放比例,当输入为0时,fx=(double)dsize.width/src.cols
。fy 垂直缩放比例,当输入为0时,fy=(double)dsize.height/src.rows
。interpolation 内插方式 内插方式有
1)INTER_NEAREST- 最近-邻居插补
2)INTER_LINEAR- 双线性插值(默认方法)
3)INTER_AREA- 像素面积相关重采样。当缩小图像时,该方法可以避免波纹的出现。当放大图像时,类似于方法CV_INTER_NN。
4)INTER_CUBIC- 双三次插值。
5)INTER_LANCZOS4-8x8像素邻域的Lanczos插值
cv2.transpose不仅使图像旋转90°,还顺便自动做了一个镜像对称
如果只想做旋转不要对称的话 建议使用np.rot90
Flipped Horizontally 水平翻转
cv2.flip(image, 1)
Flipped Vertically 垂直翻转
cv2.flip(image, 0)
Flipped Horizontally & Vertically 水平垂直翻转
cv2.flip(image, -1)
仿射变换
import cv2
import numpy as np
image = cv2.imread("timg.jpg")
row,col,channel = image.shape
# M = np.float32([[1,0,50],[0,1,50]]) #平移
# M = np.float32([[0.5,0,0],[0,0.5,0]]) #缩放
# M = np.float32([[1,0.5,0],[0,1,0]]) #倾斜
# M = np.float32([[-0.5,0,col//2],[0,0.5,0]]) #镜像后平移
M = cv2.getRotationMatrix2D((col/2,row/2),45,0.7) #旋转
dst = cv2.warpAffine(image,M,(col,row))
cv2.imshow('input',image)
cv2.imshow('output',dst)
cv2.waitKey(0)
透视变换
image = cv2.imread("book.jpg")
pts1 = np.float32([[25,30],[179,25],[12,188],[189,190]]) #选取原图四个点
pts2 = np.float32([[0,0],[200,0],[0,200],[200,200]]) #把上述四个点拉伸至什么位置
M = cv2.getPerspectiveTransform(pts1,pts2)
dst = cv2.warpPerspective(image,M,(200,201))
cv2.imshow('image',image)
cv2.imshow('dst',dst)
cv2.waitKey(0)
膨胀操作
膨胀操作只能是二值图,如果不是需要先转成二值图
# 膨胀操作
image = cv2.imread('num.jpg')
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(10,10))
dst = cv2.dilate(image,kernel)
cv2.imshow('image',image)
cv2.imshow('dst',dst)
cv2.waitKey(0)
腐蚀操作
image = cv2.imread('num.jpg')
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(10,10))
dst = cv2.erode(image,kernel) # 腐蚀操作
cv2.imshow('image',image)
cv2.imshow('dst',dst)
cv2.waitKey(0)
开操作
先腐蚀后膨胀
可用来去噪
image = cv2.imread('num2.jpg')
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(8,8))
dst = cv2.morphologyEx(image,cv2.MORPH_OPEN,kernel) #开操作
cv2.imshow('image',image)
cv2.imshow('dst',dst)
cv2.waitKey(0)
闭操作
先膨胀后腐蚀
可用来补洞
image = cv2.imread('tt.jpg')
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(8,8))
dst = cv2.morphologyEx(image,cv2.MORPH_CLOSE,kernel) #闭操作
cv2.imshow('image',image)
cv2.imshow('dst',dst)
cv2.waitKey(0)
梯度操作
膨胀减去腐蚀
提取边缘信息
image = cv2.imread('num.jpg')
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
dst = cv2.morphologyEx(image,cv2.MORPH_GRADIENT,kernel) #梯度操作
cv2.imshow('image',image)
cv2.imshow('dst',dst)
cv2.waitKey(0)
顶帽操作
原图减去开运算
获取噪点
image = cv2.imread('tt.jpg')
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
dst = cv2.morphologyEx(image,cv2.MORPH_TOPHAT,kernel) #顶帽操作
cv2.imshow('image',image)
cv2.imshow('dst',dst)
黑帽操作
原图减去闭运算
获取漏洞
image = cv2.imread('num2.jpg')
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
dst = cv2.morphologyEx(image,cv2.MORPH_BLACKHAT,kernel) #黑帽操作
cv2.imshow('image',image)
cv2.imshow('dst',dst)
cv2.waitKey(0)
本文地址:https://blog.csdn.net/qq_41334243/article/details/107138961