OPENCV简单入门(二)

一、滤波算法

img=cv2.imread("./image/four.jpg")
img=cv2.resize(img,(0,0),fx=0.6,fy=0.6)
cv2.imshow("init",img)
cv2.waitKey(0)

#均值滤波
blur=cv2.blur(img,(5,5))    #核是奇数
cv2.imshow("blur",blur)
cv2.waitKey(0)

#方框滤波
box=cv2.boxFilter(img,-1,(5,5),normalize=True)   #归一化
cv2.imshow("box0",blur)
cv2.waitKey(0)

box=cv2.boxFilter(img,-1,(5,5),normalize=False)   #超过255就为255
cv2.imshow("box1",blur)
cv2.waitKey(0)

#高斯滤波  位置不同、权值不同,距离中心节点越近权值越大,符合正态分布
gaussian=cv2.GaussianBlur(img,(5,5),0.1)
cv2.imshow("gaussian",blur)
cv2.waitKey(0)

#中值滤波
mediane=cv2.medianBlur(img,5)
cv2.imshow("mediane",blur)
cv2.waitKey(0)

cv2.destroyAllWindows()

二、腐蚀与膨胀

  简单地说,腐蚀就是黑的把白的吃掉,膨胀就是白的把黑色的吃掉

img=imread("./image/test.png")
img=cv2.resize(img,(0,0),fx=0.6,fy=0.6)
#腐蚀 erode
kernel=np.ones((3,3),np.uint8)
imgErode=cv2.erode(img,kernel,iterations=3)
#膨胀 delita
imgDilate=cv2.dilate(img,kernel,iterations=3)

cv2.imshow("init",img)
cv2.waitKey(0)
cv2.imshow("erode",imgErode)
cv2.waitKey(0)
cv2.imshow("dilate",imgDilate)
cv2.waitKey(0)

cv2.destroyAllWindows()

 三、开运算与闭运算

img=cv2.imread("./image/test.png")
img=cv2.resize(img,(0,0),fx=0.6,fy=0.6)

kernel=np.ones((3,3),np.uint8)

#开运算  先腐蚀再膨胀
imgOpen=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)

#闭运算,先膨胀再腐蚀
imgClose=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

cv2.imshow("init",img)
cv2.waitKey(0)
cv2.imshow("open",imgOpen)
cv2.waitKey(0)
cv2.imshow("close",imgClose)
cv2.waitKey(0)

cv2.destroyAllWindows()

四、梯度运算

显示一下大致的轮廓,就是膨胀后的减去腐蚀过的

img=cv2.imread("./image/test.png")
img=cv2.resize(img,(0,0),fx=0.6,fy=0.6)

kernel=np.ones((3,3),np.uint8)

#梯度运算
imgGradient=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)

cv2.imshow("init",img)
cv2.waitKey(0)

cv2.imshow("gradient",imgGradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 五、礼帽与黑帽

img=cv2.imread("./image/test.png")
img=cv2.resize(img,(0,0),fx=0.6,fy=0.6)

kernel=np.ones((3,3),np.uint8)

#礼帽    原始图像-开运算
imgTophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)

#黑帽    闭运算-原始图像
imgBlackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)

cv2.imshow("init",img)
cv2.waitKey(0)
cv2.imshow("tophat",imgTophat) 
cv2.waitKey(0)
cv2.imshow("blackhat",imgBlackhat)
cv2.waitKey(0)

cv2.destroyAllWindows()

六、soble、scharr、lapkacian算子边缘检测

1、soble:

#soble 边缘检测滤波器
img=cv2.imread("./image/test.png")
img=cv2.resize(img,(0,0),fx=0.6,fy=0.6)

#直接进行两个方向的边缘检测
sobelD=cv2.Sobel(img,cv2.CV_32F,1,1,ksize=3)
sobelD=cv2.convertScaleAbs(sobelD)
#水平方向进行边缘检测   
sobelX=cv2.Sobel(img,cv2.CV_32F,1,0,ksize=3)   #第二个参数CV_32F 可以为负数,再转换为正数,就可以把检测为负数的边缘也检测出来
sobelX = cv2.convertScaleAbs(sobelX)           #白到黑是正数,黑到白就是负数了,所有的负数会被截断成0,所以要取绝对值
#垂直方向进行边缘检测
sobelY=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
sobelY = cv2.convertScaleAbs(sobelY) 
#把两个方向综合起来,建议
sobelXY=cv2.addWeighted(sobelX,1,sobelY,1,0)

cv2.imshow("init",img)
cv2.waitKey(0)
cv2.imshow("sobelD",sobelD)
cv2.waitKey(0)
cv2.imshow("sobelX",sobelX)
cv2.waitKey(0)
cv2.imshow("sobelY",sobelY)
cv2.waitKey(0)
cv2.imshow("sobelXY",sobelXY)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

2、scharr:(与soble仅仅核不一样,更细腻)

scharrX = cv2.Scharr(img,cv2.CV_64F,1,0)
scharrY = cv2.Scharr(img,cv2.CV_64F,0,1)
scharrX = cv2.convertScaleAbs(scharrX)   
scharrY = cv2.convertScaleAbs(scharrY)  
scharrXY =  cv2.addWeighted(scharrX,1,scharrY,1,0) 

cv2.imshow("scharrXY",scharrXY)

 3、Laplacian,二阶,不再分水平垂直两个方向,上下左右和中间对比

laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian) 

七、candy边缘检测

步骤:

(1)        使用高斯滤波器,以平滑图像,滤除噪声。

(2)        计算图像中每个像素点的梯度强度和方向。

(3)        应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。

(4)       应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。

(5)        通过抑制孤立的弱边缘最终完成边缘检测。

#candy边缘检测
#宽松的阈值
canny1=cv2.Canny(img,5,80)
#比较严格的阈值
canny2=cv2.Canny(img,70,80)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

small_planet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值