opencv|opencv学习笔记(七)几何变换、阈值处理、平滑处理

目录
目录
几何变换
缩放
翻转
平移
旋转
阈值处理
二值化阈值处理
反二值化阈值处理
自适应阈值处理
otsu处理
【opencv|opencv学习笔记(七)几何变换、阈值处理、平滑处理】滤波处理
均值滤波
方框滤波
高斯滤波
中值滤波
双边滤波
2d卷积
几何变换 缩放

# shuchu = cv2.resize(src, dsize[ , fx[ ,fy[ ,interpolation]]]) # shuchu :输出的目标图像 # src: 需要缩放的原始图像 # dsize: 代表输出图像的大小 # fx: 水平方向的缩放比例 # fy: 竖直方向的缩放比例 # interpolation: 插值方式 #-----------------------# import cv2 import numpy as np img = np.ones([2,4,3],dtype=np.uint8)#返回一个2行4列元素全是1的数值,每个元素有3个通道? size = img.shape[:2] rst = cv2.resize(img,size) print('img.shape=\n',img.shape) print('img=\n',img) print('rst.shape=\n',rst.shape) print('rst=\n',rst)

翻转
import cv2 img = cv2.imread('lfy.jpg') x = cv2.flip(img,0) y = cv2.flip(img,1) xy = cv2.flip(img,-1) cv2.imshow('img',img) cv2.imshow('x',x) cv2.imshow('y',y) cv2.imshow('xy',xy) cv2.waitKey() cv2.destroyAllWindows()

平移
""" dst = cv2.warpAffine( src , M , dsize )import cv2 dst 代表仿射后的输出图像,该图像的类型和原始图像的类型相同。 src 代表要仿射的原始图像。 M 代表一个 2×3 的变换矩阵。使用不同的变换矩阵,就可以实现不同的仿射变换。 dsize 代表输出图像的尺寸大小 """ import cv2 import numpy as np img=cv2.imread("lfy.jpg") height,width=img.shape[:2] x=100 y=200 M = np.float32([[1, 0, x], [0, 1, y]]) move=cv2.warpAffine(img,M,(width,height)) cv2.imshow("original",img) cv2.imshow("move",move) cv2.waitKey() cv2.destroyAllWindows()

旋转
import cv2 img = cv2.imread('lfy.jpg') height,width = img.shape[ :2] M = cv2.getRotationMatrix2D((width/2,height/2),45,0.6) rotate = cv2.warpAffine(img,M,(width,height)) cv2.imshow('original',img) cv2.imshow('rotate',rotate) cv2.waitKey() cv2.destroyAllWindows()

阈值处理 二值化阈值处理
import cv2 img=cv2.imread("lfy.JPG") t,rst=cv2.threshold(img,127,255,cv2.THRESH_BINARY) cv2.imshow("img",img) cv2.imshow("rst",rst) cv2.waitKey() cv2.destroyAllWindows()

反二值化阈值处理
import cv2 img=cv2.imread("lfy.jpg") t,rst=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV) cv2.imshow("img",img) cv2.imshow("rst",rst) cv2.waitKey() cv2.destroyAllWindows()

自适应阈值处理
import cv2 img=cv2.imread("lfy.jpg",0) t1,thd=cv2.threshold(img,127,255,cv2.THRESH_BINARY)#二值化阈值处理 athdMEAN=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)#自适应阈值 方法一 athdGAUS=cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)#自适应阈值 方法二 cv2.imshow("img",img) cv2.imshow("thd",thd) cv2.imshow("athdMEAN",athdMEAN) cv2.imshow("athdGAUS",athdGAUS) cv2.waitKey() cv2.destroyAllWindows()

otsu处理
import cv2 img=cv2.imread("lfy.jpg",0) t1,thd=cv2.threshold(img,127,255,cv2.THRESH_BINARY) t2,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) cv2.imshow("img",img) cv2.imshow("thd",thd) cv2.imshow("otus",otsu) cv2.waitKey() cv2.destroyAllWindows()

滤波处理 均值滤波
# dst = cv2.blur( src, ksize, anchor, borderType ) # dst是返回值,滤波后得到的图像。 # src是需要处理的图像,即原始图像。 # ksize是滤波核的大小 # anchor是锚点,默认为(-1,-1)表示中心点 # bordertype是边界样式,决定处理边界的样式 import cv2 img=cv2.imread("lfy.jpg")#读取待处理图像 r=cv2.blur(img,(5,5))#使用 blur 函数处理 cv2.imshow("original",img) cv2.imshow("result",r) cv2.waitKey() cv2.destroyAllWindows()

方框滤波
# dst = cv2.boxFilter( src, ddepth, ksize, anchor, normalize, borderType ) # dst 返回值 # src 原图像 # ddepth 处理结果的图像深度,-1表示与原始图像的使用相同的图像深度 # ksize 滤波核的大小 # anchor 锚点 # normalize 表示滤波时是否进行归一化处理,为1时,进行归一化处理,为0时,不进行归一化处理 # bordertype 边界样式 import cv2 o=cv2.imread("lfy.jpg") r=cv2.boxFilter(o,-1,(2,2),normalize=0) cv2.imshow("original",o) cv2.imshow("result",r) cv2.waitKey() cv2.destroyAllWindows()

高斯滤波
import cv2 o=cv2.imread("lfy.jpg") r=cv2.GaussianBlur(o,(5,5),0,0) cv2.imshow("original",o) cv2.imshow("result",r) cv2.waitKey() cv2.destroyAllWindows()

中值滤波
import cv2 o=cv2.imread("image\\lenaNoise.png") r=cv2.medianBlur(o,3) cv2.imshow("original",o) cv2.imshow("result",r) cv2.waitKey() cv2.destroyAllWindows()

双边滤波
# 双边滤波 ''' dst = cv2.bilateralFilter( src, d, sigmaColor, sigmaSpace, borderType ) d 是在滤波时选取的空间距离参数,这里表示以当前像素点为中心点的直径 sigmaColor 是滤波处理时选取的颜色差值范围,该值决定了周围哪些像素点能够参与到滤波中来 该值为 0 时,滤波失去意义; 该值为 255 时,指定直径内的所有点都能够参与运算 sigmaSpace 是坐标空间中的 sigma 值 borderType 是边界样式,该值决定了以何种方式处理边界。 ''' import cv2 o=cv2.imread("lfy.jpg") r=cv2.bilateralFilter(o,25,100,100) cv2.imshow("original",o) cv2.imshow("result",r) cv2.waitKey() cv2.destroyAllWindows()

2d卷积
'''' dst = cv2.filter2D( src, ddepth, kernel, anchor, delta, borderType ) kernel 是卷积核,是一个单通道的数组 delta 是修正值,它是可选项。如果该值存在,会在基础滤波的结果上加上该值作为最终的滤波处理结果 ''' import cv2 import numpy as np o = cv2.imread("lfy.jpg") kernel = np.ones((9,9),np.float32)/81 r = cv2.filter2D(o,-1,kernel) cv2.imshow("original",o) cv2.imshow("Gaussian",r) cv2.waitKey() cv2.destroyAllWindows()


    推荐阅读