OpenCV---其他形态学操作
一:顶帽实现(原图像与开操作图像的差值)
import cv2 as cv import numpy as np def top_hat_demo(image): gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU) cv.imshow("binary",binary) #这里的二值化图像就可以看作是原图像(注意:基于腐蚀膨胀是可以直接对彩色图像操作的)) kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5)) dst = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel) #查看开操作图像 cv.imshow("open_demo",dst) dst = cv.morphologyEx(binary,cv.MORPH_TOPHAT,kernel) #查看顶帽图像 cv.imshow("top_hat_demo",dst) src = cv.imread("./cir.png") #读取图片 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应 cv.imshow("input image",src) #通过名字将图像和窗口联系 top_hat_demo(src) cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作 cv.destroyAllWindows() #销毁所有窗口
二:黑帽实现(原图像与闭操作图像的差值)
def black_hat_demo(image): gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU) cv.imshow("binary",binary) kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15)) dst = cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel) cv.imshow("close_demo",dst) dst = cv.morphologyEx(binary,cv.MORPH_BLACKHAT,kernel) cv.imshow("black_hat_demo",dst)
三:图像的梯度
(一)基本梯度(膨胀后的图像与腐蚀后的图像差值)
def graditent_demo(image): gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU) cv.imshow("binary",binary) kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15)) dst = cv.dilate(binary, kernel) cv.imshow("dilate_demo", dst) dst = cv.erode(binary, kernel) cv.imshow("erode_demo", dst) dst = cv.morphologyEx(binary,cv.MORPH_GRADIENT,kernel) cv.imshow("graditent_demo",dst)
(二)内部梯度(原图像减去腐蚀后的图像差值)
def graditent_demo(image): gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU) cv.imshow("binary",binary) kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15)) erode_dst = cv.erode(binary, kernel) cv.imshow("erode_demo", erode_dst) dst2 = cv.subtract(dilate_dst,binary) cv.imshow("inner graditent",dst1)
(三)外部梯度(膨胀后图像与原图差值)
def graditent_demo(image): gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU) cv.imshow("binary",binary) kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15)) dilate_dst = cv.dilate(binary, kernel) cv.imshow("dilate_demo", dilate_dst) dst2 = cv.subtract(dilate_dst,binary) cv.imshow("outer graditent",dst2)
作者:山上有风景
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?