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

目录

目录

几何变换

缩放

翻转

平移

旋转

阈值处理

二值化阈值处理

反二值化阈值处理

自适应阈值处理

otsu处理

滤波处理

均值滤波

方框滤波

高斯滤波

中值滤波

双边滤波

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,计算机视觉,python)