python + openCV图像处理(五)

引言

此系列博客记录 网易云课堂 python + openCV图像处理课程的学习过程。

本篇博客将介绍 形态学操作、图像梯度 两大部分。


示例图片

erosion.png
在这里插入图片描述
maoci.png
在这里插入图片描述
paopao.png
在这里插入图片描述


代码

1、形态学操作

  • 图像腐蚀、膨胀

原理:
在这里插入图片描述
在这里插入图片描述
腐蚀:
在这里插入图片描述
膨胀:
在这里插入图片描述

import cv2
import numpy as np

a = cv2.imread(r"C:\workspace\python\openCV\maoci.png",cv2.IMREAD_UNCHANGED)
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(a,kernel,iterations=9)  # 图像腐蚀

cv2.imwrite(r"C:\workspace\python\openCV\erosion.png",erosion)
dilation = cv2.dilate(erosion,kernel,iterations=9) #图像膨胀

cv2.imshow("a",a) 
cv2.imshow("erosion",erosion)
cv2.imshow("dilation",dilation)

cv2.waitKey()
cv2.destroyAllWindows()


erode(src,kernel,iterations)
dilate(src,kernel,iterations)

其中,src 是目标图像,kernel 是卷积核,iterations 是迭代次数(缺省值为1)

效果图:

在这里插入图片描述


  • 开运算,闭运算,梯度运算

原理:
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

import cv2
import numpy as np

a = cv2.imread(r"C:\workspace\python\openCV\maoci.png",cv2.IMREAD_UNCHANGED)
kernel = np.ones((10,10),np.uint8)
b = cv2.morphologyEx(a,cv2.MORPH_OPEN,kernel) # 开运算 
# b = cv2.morphologyEx(a,cv2.MORPH_CLOSE,kernel) # 闭运算
# b = cv2.morphologyEx(a,cv2.MORPH_GRADIENT,kernel) # 梯度运算
# b = cv2.morphologyEx(a,cv2.MORPH_TOPHAT,kernel) # 礼帽操作
# b = cv2.morphologyEx(a,cv2.MORPH_BLACKHAT,kernel) #黑帽操作

cv2.imshow("a",a) 
cv2.imshow("b",b)


cv2.waitKey()
cv2.destroyAllWindows()

2、图像梯度

  • sobel算子

原理:
在这里插入图片描述
水平方向:
在这里插入图片描述
竖直方向:

在这里插入图片描述

import cv2
import numpy as np

a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)  
sobelx = cv2.Sobel(a,cv2.CV_64F,1,0) # x方向梯度
sobely = cv2.Sobel(a,cv2.CV_64F,0,1) # y方向梯度

sobelx = cv2.convertScaleAbs(sobelx) # x的绝对值
sobely = cv2.convertScaleAbs(sobely) # y的绝对值

sobelxy = cv2.addWeighted(sobelx,0.5,sobely,0.5,0) # x与y相加

cv2.imshow("original",a) 
cv2.imshow("xy",sobelxy)


cv2.waitKey()
cv2.destroyAllWindows()

效果图:
在这里插入图片描述

  • scharr算子

原理:
在这里插入图片描述
在这里插入图片描述

import cv2
import numpy as np

a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)  
scharrx = cv2.Scharr(a,cv2.CV_64F,1,0) # x方向梯度
scharry = cv2.Scharr(a,cv2.CV_64F,0,1) # y方向梯度

scharrx = cv2.convertScaleAbs(scharrx) # x的绝对值
scharry = cv2.convertScaleAbs(scharry) # y的绝对值

scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0) # x与y相加

cv2.imshow("original",a) 
cv2.imshow("xy",scharrxy)


cv2.waitKey()
cv2.destroyAllWindows()

效果图:

注意:小新脸上的红晕也识别出来了
在这里插入图片描述

  • Laplacian算子

原理:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import cv2
import numpy as np

a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)  
lapiacian = cv2.Laplacian(a,cv2.CV_64F)
lapiacian = cv2.convertScaleAbs(lapiacian) # 转回uint8

cv2.imshow("original",a) 
cv2.imshow("lapiacian",lapiacian)


cv2.waitKey()
cv2.destroyAllWindows()

效果图:
在这里插入图片描述

14、canny边缘检测
原理:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import cv2
import numpy as np

a = cv2.imread(r"C:\workspace\python\openCV\xiaoxin.png",cv2.IMREAD_UNCHANGED)  
b = cv2.Canny(a,100,200) #细节更多的话,同时调低两个参数就行

cv2.imshow("original",a) 
cv2.imshow("result",lapiacian)


cv2.waitKey()
cv2.destroyAllWindows()

效果图:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值