欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

opencv-图像的几何变换小结

程序员文章站 2023-09-17 23:23:21
resize/transpose/flipdef 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...

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-8x8像素邻域的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)

仿射变换

opencv-图像的几何变换小结

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)

opencv-图像的几何变换小结

透视变换

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)

opencv-图像的几何变换小结

膨胀操作

膨胀操作只能是二值图,如果不是需要先转成二值图

# 膨胀操作
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)

opencv-图像的几何变换小结

腐蚀操作

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)

opencv-图像的几何变换小结

开操作

先腐蚀后膨胀
可用来去噪

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)

opencv-图像的几何变换小结

闭操作

先膨胀后腐蚀
可用来补洞

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)

opencv-图像的几何变换小结

梯度操作

膨胀减去腐蚀
提取边缘信息

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)

opencv-图像的几何变换小结

顶帽操作

原图减去开运算
获取噪点

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)

opencv-图像的几何变换小结

黑帽操作

原图减去闭运算
获取漏洞

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)

opencv-图像的几何变换小结

本文地址:https://blog.csdn.net/qq_41334243/article/details/107138961