resize/transpose/flip

  • def resize(src, dsize, dst=None, fx=None, fy=None, interpolation=None)

。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-8×8像素邻域的Lanczos插值

  • def transpose(src, dst=None)

cv2.transpose不仅使图像旋转90°,还顺便自动做了一个镜像对称
如果只想做旋转不要对称的话 建议使用np.rot90

  • def flip(src, flipCode, dst=None)

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