赞
踩
blur
import cv2 img_gs = cv2.imread('./media/lvbo2.png') # 高斯噪声 img_jy = cv2.imread('./media/lvbo3.png') # 椒盐噪声 def buler(): img_jz1= cv2.blur(img_gs,(3,3)) img_jz2= cv2.blur(img_jy,(3,3)) cv2.imshow('img_jz1',img_jz1) cv2.imshow('img_jz2',img_jz2) buler() cv2.imshow('img_gs',img_gs) cv2.imshow('img_jy',img_jy) cv2.waitKey(0)
boxFilter
img_jz1 = cv2.boxFilter(img_gs,-1,(3,3),normalize=False ) # [图像] [输出图像的深度,-1是原图像的深度] [核的大小]
img_jz2 = cv2.boxFilter(img_jy,-1,(3,3))
cv2.imshow('img_jz1',img_jz1)
cv2.imshow('img_jz2',img_jz2)
GaussianBlur
img_jz1 = cv2.GaussianBlur(img_jy,(3,3),10) # 图像 核大小 sigma的值 值越大 模糊效果越明显
img_jz2 = cv2.GaussianBlur(img_gs,(3,3),10)
img_jz1 = cv2.medianBlur(img_gs,3) # 图像 核大小
img_jz2 = cv2.medianBlur(img_jy,3) # 均值滤波
同时考虑像素点周围的点和像素值的大小
核值范围内每个像素点的权重值由位置的权重和像素值的权重相乘得到
ω
(
i
,
j
,
k
,
l
)
=
w
s
∗
w
r
\omega(i,j,k,l)=w_{s}*w_{r}
ω(i,j,k,l)=ws∗wr
空间位置的权重值
ω
s
=
e
−
(
i
−
k
)
2
+
(
j
−
l
)
2
2
σ
s
2
\omega_{s}=e^{-{\frac{(i-k)^{2}+(j-l)^{2}}{2\sigma_{s}{}^{2}}}}
ωs=e−2σs2(i−k)2+(j−l)2
像素值大小得到的权重
ω
r
=
e
−
∥
f
(
i
,
j
)
−
f
(
k
,
l
)
∥
2
2
σ
r
2
\omega_{r}=e^{-{\frac{\|f(i,j)-f(k,l)\|^{2}}{2\sigma_{r}{}^{2}}}}
ωr=e−2σr2∥f(i,j)−f(k,l)∥2
img_jz1 = cv2.bilateralFilter(img_gs,9,70,70)
img_jz2 = cv2.bilateralFilter(img_jy,9,70,70)
boder_x = cv2.Sobel(img_nut,-1,1,0) # x方向的梯度,就是y方向的边缘
boder_y = cv2.Sobel(img_nut,-1,0,1) # y方向的梯度
cv2.imshow('boder_x',boder_x)
cv2.imshow('boder+y',boder_y)
boder_x = cv2.Scharr(img_nut,-1,1,0)
boder_y = cv2.Scharr(img_nut,-1,0,1)
boder = cv2.Laplacian(img_nut,-1)
Canny边缘检测
边缘的像素值和周围的像素值有着其差异,表现为较大的像素差值,通过这个特点找到图像的边缘
Canny边缘检测步骤
4.1 读取图像
4.2 二值化图像
4.3 高斯滤波
4.4 计算图像的梯度和方向
4.5 非极大值抑制
4.6 双阈值筛选
boder = cv2.Canny(img_nut,60,120) # 图像 低阈值 高阈值
contours,hierarchy = cv2.findContours(image,mode,method)
contours 返回轮廓点的列表,子列表的格式就是轮廓的个数
hierarchy 轮廓的关系
mode:轮廓的搜索模式
method:对轮廓点的存储方式
CHAIN_APPROX_NONE表示将所有的轮廓点都进行存储;
CHAIN_APPROX_SIMPLE只存储有用的点 默认使用这个方法;
CHAIN_APPROX_TC89_L1减少轮廓中的冗余点,更加准确地表示轮廓的形状。
CHAIN_APPROX_TC89_L1是一种较为精确的轮廓逼近方法,适用于需要较高精度的轮廓表示的情况。
cv2.drawContours(image, contours, contourIdx, color, thickness)
def contours():
img_nut = cv2.imread('./media/nut.png')
img_nut_gray = cv2.cvtColor(img_nut,cv2.COLOR_BGR2GRAY)
nut_erzhi = cv2.adaptiveThreshold(img_nut_gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,25,10)
cv2.imshow('nut_erzhi',nut_erzhi)
contours,h = cv2.findContours(nut_erzhi,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img_nut,contours,-1,(255,0,0))
cv2.imshow('nut',img_nut)
contours()
cv2.waitKey(0)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。