0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV入门之OpenCV的基本操作5

jf_78858299 来源:DL INtoOUT 作者:AN 2023-02-07 14:35 次阅读

9、形态学操作: 腐蚀、膨胀、开运算、闭运算、顶帽、黑帽

利用一种特殊的结构(卷积核)来测量或提取输入图像中对应的形状或特征以便进一步图像分析和识别,基本都是对二进制图像进行处理。

基本操作:膨胀和腐蚀,开运算、闭运算、顶帽、黑帽

腐蚀操作 ,用卷积核扫描图像,一般都为1,如果图像内卷积核范围内全是白的(255),那255保留,如果卷积核范围内有黑的(0),那么该范围都变为黑的(0)。

膨胀操作 ,与腐蚀操作相反,只要保证卷积核的锚点是非0值(255),周边无论是0还是非0,都变成非0值(255)。

开运算 :腐蚀+膨胀,去除外部噪声,去除白点。

闭运算 :膨胀+腐蚀,去除内部噪声,去除黑点。

顶帽操作 :原图-开运算,得到外部去掉的噪声。

因为开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。

顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

黑帽操作 :原图-闭运算,得到内部去掉的噪声。

黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关。

所以,黑帽运算用来分离比邻近点暗一些的斑块。可以得到轮廓效果图。

形态学梯度 :图像膨胀与腐蚀的差别。结果看上去就像前景物体的轮廓。

基本梯度 :膨胀后图像减去腐蚀后图像得到的差值图像。

内部梯度 :用原图减去腐蚀图像得到的差值图像。

外部梯度 :膨胀后图像减去原图像得到的差值图像。

morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst

src:输入图像

op:操作类型

MORTH_OPEN:函数做开运算

MORTH_CLOSE:函数做闭运算

MORTH_GRADIENT:函数做形态学梯度运算

MORTH_TOPHAT:函数做顶帽运算

MORTH_BLACKHAT:函数做黑帽运算

MORTH_DILATE :函数做膨胀运算

MORTH_ERODE:函数做腐蚀运算

kernel :内核类型,用getStructuringElement函数得到

def Morphology():
    # morphology 形态学
    # 利用一种特殊的结构(卷积核)来测量或提取输入图像中对应的形状或特征
    # 以便进一步图像分析和识别,基本都是对二进制图像进行处理
    # 基本操作:膨胀和腐蚀,开运算、闭运算、顶帽、黑帽
    # 图像全局二值化,将每个像素转换为两种值(0,255)
    img = cv2.imread('./images/bank.png')
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)


    # 返回两个值,阈值和处理后的图片,大于thresh(127)全是白的255
    # THRESH_BINARY 二进制阈值化 -> 大于阈值为1,小于阈值为0
    # THRESH_BINARY_INV 反二进制阈值化 -> 大于阈值为0,小于阈值为1
    # THRESH_TRUNC 截断阈值化 -> 大于阈值为阈值,小于阈值不变
    # THRESH_TOZERO 阈值化为0 -> 大于阈值的不变,小于阈值的全为0
    # THRESH_TOZERO_INV 反阈值化为0 -> 大于阈值为0,小于阈值不变
    # thresh,img_bw = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
    # 自适应阈值二值化 阈值是根据图像上的每一个小区域计算与其对应的阈值。
    # ADAPTIVE_THRESH_MEAN_C(通过平均的方法取得平均值)———阈值取自相邻区域的平均值)
    # ADAPTIVE_THRESH_GAUSSIAN_C(通过高斯取得高斯值)———阈值取自相邻区域的加权和
    # blockSize Int类型的,这个值来决定像素的邻域块有多大。
    # C:偏移值调整量,计算adaptiveMethod用到的参数
    img_bw = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,0)


    # 获取形态学卷积核
    # cv2.MORPH_ELLIPSE 椭圆,cv2.MORPH_RECT 矩形,cv2.MORPH_CROSS 十字架
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(7,7))
    # kernel = np.ones((3, 3), np.uint8)
    # 腐蚀操作,用卷积核扫描图像,一般都为1,如果图像内卷积核范围内全是白的,那扫后为白的
    # iterations 为迭代次数
    img_erode = cv2.erode(img_bw,kernel,iterations=2)


    # 膨胀操作,与腐蚀操作相反,只要保证卷积核的锚点是非0值(白的),周边无论是0还是非0,都变成非0值
    img_dilate = cv2.dilate(img_bw,kernel)


    # 开运算:腐蚀➕膨胀,去除外部噪声,去除白点
    # 闭运算:膨胀➕腐蚀,去除内部噪声,去除黑点
    open_operate = cv2.morphologyEx(img_bw,cv2.MORPH_OPEN,kernel,iterations=2)
    close_operate = cv2.morphologyEx(img_bw,cv2.MORPH_CLOSE,kernel,iterations=2)


    # 形态学的梯度,:原图-腐蚀,得到腐蚀掉的部分,即边
    img_grad = cv2.morphologyEx(img_bw,cv2.MORPH_GRADIENT,kernel)


    # 顶帽操作:原图-开运算,得到外部去掉的噪声
    img_tophat = cv2.morphologyEx(gray,cv2.MORPH_TOPHAT,kernel)

    # 黑帽操作:原图-闭运算,得到内部去掉的噪声
    img_blackhat = cv2.morphologyEx(gray,cv2.MORPH_BLACKHAT,kernel)


    cv2.imshow("imshow",img_tophat)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

运行结果

原图&二值化

腐蚀&膨胀

开运算&闭运算

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    178

    文章

    2929

    浏览量

    228959
  • 图像处理
    +关注

    关注

    26

    文章

    1242

    浏览量

    56118
  • 计算机视觉
    +关注

    关注

    8

    文章

    1614

    浏览量

    45717
  • OpenCV
    +关注

    关注

    29

    文章

    615

    浏览量

    40917
收藏 人收藏

    评论

    相关推荐

    OpenCV_编程简介(入门必读)

    opencv编程简介,入门必读,适合新手简单了解opencv的相关知识。
    发表于 03-21 13:49 11次下载

    OpenCV开发环境的配置

    OpenCV3编程入门》书本配套源代码:OpenCV开发环境的配置
    发表于 06-06 15:20 8次下载

    基本阈值操作_《OpenCV3编程入门》书本配套源代码

    OpenCV3编程入门》书本配套源代码:基本阈值操作
    发表于 06-06 15:39 8次下载

    基本鼠标操作_《OpenCV3编程入门》书本配套源代码

    OpenCV3编程入门》书本配套源代码:基本鼠标操作
    发表于 06-06 15:39 5次下载

    OpenCV进行基本绘图_《OpenCV3编程入门》书本配套源

    OpenCV3编程入门》书本配套源代码:用OpenCV进行基本绘图
    发表于 05-11 16:46 36次下载

    Learning OpenCV中文版

    Learning OpenCV中文版,超级经典opencv入门手册,值得收藏学习。
    发表于 08-26 14:12 0次下载

    OpenCV3编程入门-源码例程全集-OpenCV开发环境的配置

    OpenCV3编程入门-源码例程全集-OpenCV开发环境的配置,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 16:27 20次下载

    OpenCV3编程入门-源码例程全集-基本阈值操作

    OpenCV3编程入门-源码例程全集-基本阈值操作,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 16:55 0次下载

    OpenCV3编程入门-源码例程全集-基本鼠标操作

    OpenCV3编程入门-源码例程全集-基本鼠标操作,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 16:55 0次下载

    OpenCV进行基本绘图_OpenCV3编程入门-源码例程

    OpenCV3编程入门-源码例程全集-用OpenCV进行基本绘图,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 17:02 3次下载

    OpenCV入门OpenCV的基本操作1

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列
    的头像 发表于 02-07 14:19 619次阅读
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入门</b>之<b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>1

    OpenCV入门OpenCV的基本操作2

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列
    的头像 发表于 02-07 14:19 641次阅读
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入门</b>之<b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>2

    OpenCV入门OpenCV的基本操作实战代码

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列
    的头像 发表于 02-07 14:24 638次阅读

    OpenCV入门OpenCV的基本操作3

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列
    的头像 发表于 02-07 14:33 437次阅读
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入门</b>之<b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>3

    OpenCV入门OpenCV的基本操作4

    OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列
    的头像 发表于 02-07 14:34 445次阅读
    <b class='flag-5'>OpenCV</b><b class='flag-5'>入门</b>之<b class='flag-5'>OpenCV</b>的基本<b class='flag-5'>操作</b>4