目录
目录
几何变换
缩放
翻转
平移
旋转
阈值处理
二值化阈值处理
反二值化阈值处理
自适应阈值处理
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()
推荐阅读
- 图像处理|Opencv学习笔记 透视变换(perspective transform)
- Algorithm|ZOJ--003Crashing Balloon
- Algorithm|ZOJ练习--001A + B Problem
- Algorithm|ZOJ练习--002Fire Net
- Machine|机器学习之模型评估
- 大数据|最新的一篇视觉Transformer综述!
- python自动化办公|用python实现自动化办公------Excel操作
- 技巧tips|图像风格迁移实战
- 技巧tips|Python实例|将Excel文件的工作簿内容拆分为多个Excel文件