【OpenCV】66 图像形态学—开闭操作时候结构元素应用演示

66 图像形态学—开闭操作时候结构元素应用演示 代码

import cv2 as cv import numpy as npdef open_demo(): src = https://www.it610.com/article/cv.imread("../images/fill.png") cv.namedWindow("input", cv.WINDOW_AUTOSIZE) cv.imshow("input", src)# 图像二值化 gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) cv.imshow("binary1", binary)# 开操作 se1 = cv.getStructuringElement(cv.MORPH_RECT, (20, 1), (-1, -1)) binary = cv.morphologyEx(binary, cv.MORPH_OPEN, se1) cv.imshow("binary", binary)# 提取轮廓 contours, hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) for c in range(len(contours)): x, y, w, h = cv.boundingRect(contours[c]) y = y - 10 h = 12 cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 1, 8, 0) cv.imshow("result", src)def close_demo(): src = https://www.it610.com/article/cv.imread("../images/morph3.png") cv.namedWindow("input", cv.WINDOW_AUTOSIZE) cv.imshow("input", src)# 图像二值化 gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)# 闭操作 se = cv.getStructuringElement(cv.MORPH_ELLIPSE, (15, 15), (-1, -1)) binary = cv.morphologyEx(binary, cv.MORPH_CLOSE, se) cv.imshow("close", binary)close_demo() # open_demo() cv.waitKey(0) cv.destroyAllWindows()

实验结果 【OpenCV】66 图像形态学—开闭操作时候结构元素应用演示
文章图片

【OpenCV】66 图像形态学—开闭操作时候结构元素应用演示
文章图片

解释 【【OpenCV】66 图像形态学—开闭操作时候结构元素应用演示】OpenCV中图像形态学开操作与闭操作,根据结构元素的不同可以实现不同的二值图像处理效果,我们可以通过下面的结构元素对图像进行开操作,提取二值图像中水平与垂直线,这个方法比霍夫直线检测要好用得多, 在一些应用场景中会特别有用,图像分析、OCR布局分析中形态学操作十分重要,我们通过两个例子来说明开闭操作的作用。
一, 开操作提取水平线,实现填空题横线位置提取
结构元素大小为20x1
第一张图与第二张图,是开操作提取填空题中水平横线的操作,其步骤分为:
  1. 转灰度
  2. 转二值,可选降噪
  3. 形态学操作,提取水平线
  4. 轮廓发现,确定位置
二, 闭操作实现不同层次的轮廓填充
结构元素分为两种:
矩形结构元素25x25大小
圆形结构元素15x15大小
第三张图、第四张图像对应闭操作的相关运行结果。
所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。
【OpenCV】66 图像形态学—开闭操作时候结构元素应用演示
文章图片

    推荐阅读