测怀孕什么时候最准| 湿气太重了吃什么药| 腊月二十三是什么星座| 阿司匹林肠溶片什么时候吃最好| 焕字五行属什么| 喜筵和喜宴是什么意思| 毛孔粗大用什么药膏| 1946年属狗的是什么命| 做b超能查出什么| 移动电源和充电宝有什么区别| 痛心疾首的疾是什么意思| 流产后吃什么补身体| 皮肤真菌感染用什么药| 宫缩是什么意思| 4月4日是什么日子| 膝跳反射属于什么反射| 辛辣是什么意思| 末梢神经炎是什么症状| 马克定食是什么意思| 反胃是什么意思| 刘邦的老婆叫什么名字| 人乳头瘤病毒51型阳性是什么意思| 为什么要延迟退休| 敬谢不敏是什么意思| 尿液是什么味道| 什么叫正盐| 学考是什么| 一个丝一个鸟读什么| 尿素氮高吃什么药| 吃什么让月经量增多| 什么是平舌音什么是翘舌音| rsl是什么意思| 釜底抽薪是什么计| 肺部结节有什么症状| lov是什么意思| 回奶吃什么药| 子宫后倾位是什么意思| 部长是什么职位| 竹外桃花三两枝的下一句是什么| 小孩多动症是什么原因引起的| 荨麻疹抹什么药膏| dos是什么| 张学良为什么叫小六子| 呕吐拉肚子吃什么药| 梦见狗咬手是什么意思| 丙火是什么意思| 慢性荨麻疹是什么症状| 珐琅是什么| 无锡有什么好玩的| 壁细胞主要分泌什么| 胃下垂有什么症状表现| 鼻孔干燥是什么原因| 刚出生的小鱼苗吃什么| 肾结石不能吃什么| 崖柏是什么| 后天是什么日子| 痔疮是什么病| 前列腺液是什么| 经期吃榴莲有什么好处| 胎盘吃了对身体有什么好处| 氯偏高是什么原因| 1953年是什么年| 女的排卵期一般是什么时间| 什么叫肾功能不全| gmp什么意思| 怀孕1个月有什么症状| 动物的尾巴有什么用处| 为什么早上起来口苦| 日柱将星是什么意思| 上海副市长什么级别| 喝什么茶养肝护肝最好| 大众什么车最贵| 中国最长的河流是什么河| 台风什么时候登陆| 直肠疾病都有什么症状| 患得患失是什么意思| 吃什么补血快| 熊猫为什么被称为国宝| 人生的意义是什么| 什么茶不能喝脑筋急转弯| 鼻子流水是什么原因| aj是什么牌子| 头疼想吐是什么原因引起的| 头上长虱子什么原因引起的| allan英文名什么意思| 4月7号是什么星座| 猫来家门口有什么预兆| 鬼迷心窍是什么生肖| 跖疣用什么药膏能治好| 吃什么对肝脏有好处能养肝| 阿尔卑斯是什么意思| 闰六月要给父母买什么| 海棠什么时候开花| 新生儿一直哭闹是什么原因| 好马不吃回头草是什么意思| 眼压高是什么原因引起的| 颈椎病用什么药膏| 五岳是什么意思| 疖肿是什么原因引起的| 补休是什么意思| 何方神圣是什么意思| 长焦镜头是什么意思| 基本医疗保险包括什么| 炙的意思是什么| 肚子痛是什么原因| 归脾丸的功效与作用治什么病| 为什么一喝酒就头疼| 癫痫病是什么病| po医学上是什么意思| 血压高吃什么药最好| 嘴角边长痘痘是什么原因| 甲醛是什么东西| 姑奶奶的老公叫什么| 艾草长什么样| 上火吃什么可以降火| 调和油是什么意思| 哟西哟西什么意思| 健康证都查什么传染病| 急性上呼吸道感染是什么引起的| 今天出生的男宝宝取什么名字好| 六味地黄丸有什么副作用| 开水烫了用什么紧急处理| 童子是什么意思| 喉咙痛喝什么汤好| 1988属什么生肖| 九加虎念什么| 梦到血是什么意思| 来月经吃什么| 说辞是什么意思| 小便绿色是什么原因| 杏花什么季节开| 小分子水是什么水| 三体是什么意思| 姐姐的孩子叫我什么| 溃疡是什么| 钾肥是什么肥料| 尖牙什么时候换| 大疱病是什么病| 读书有什么好处| 万言万当不如一默是什么意思| 小鸡炖什么好吃| 为什么牙齿会发黑| kid什么意思| 烫伤用什么药膏| 多动症挂什么科| 痛苦的反义词是什么| 猫需要打什么疫苗| 妇科千金片主要治什么| 埋线有什么好处和坏处| 甘油三酯高什么原因| 蓝得什么| 桃花是什么颜色的| 4月25日是什么星座| 什么药消肿最快最有效| 金牛座属于什么象星座| 为什么听力会下降| 桑葚泡水喝有什么功效| 父母是o型血孩子是什么血型| 手麻木什么原因| 天蝎座和什么座最配| 山梨酸钾是什么添加剂| 潴留囊肿是什么意思| 睡醒后腰疼是什么原因| 早餐吃什么营养又健康| 禅位是什么意思| 郑和是什么族| 嗓子干疼吃什么药| 马女和什么属相最配| 总恶心是什么原因| 梦见黑蛇是什么意思| 牛骨煲汤搭配什么最好| zara是什么意思| 梦到上坟是什么意思| 危机四伏是什么生肖| 宫颈纳囊是什么| pku什么意思| 白色加红色等于什么颜色| 脚抽筋是什么原因引起的| 重庆为什么这么热| 委曲求全是什么生肖| 口腔医学技术是什么| 妇科炎症用什么药| 眦是什么意思| 事宜愿为是什么意思| 超体2什么时候上映| 鸟飞进家里是什么预兆| 日字五行属什么| 小巧思什么意思| 阿尼是什么意思| 吃什么对神经恢复快速| 心包积液吃什么药| 脚气涂什么药膏| 肺炎吃什么药| 肝火旺盛吃什么药| 话少一般都是什么人| 胃疼喝什么可以缓解| 世子是什么意思| 淀粉酶偏高是什么原因| 胡萝卜补充什么维生素| 鱼胶是鱼的什么部位| 玻尿酸有什么作用| 925是什么意思| 为什么今年有两个六月| 菜心又叫什么菜| 瘦人吃什么长胖| 智能手环是干什么用的| 有一种水果叫什么竹| 湿热吃什么中药| 手机充电慢是什么原因| 女人太瘦吃什么增肥| 蒸米饭时加什么好吃| 凤凰男是什么意思| 空腹血糖受损是什么意思| 肌肉劳损用什么药| 田野是什么意思| 蝾螈是什么动物| 去港澳旅游需要什么证件| 抗凝药是什么意思| 小狗可以吃什么水果| 金鱼吃什么| 告加鸟念什么| 9.4号是什么星座| 什么星座最花心| 临兵斗者皆阵列在前什么意思| 梦见针是什么意思| 腮帮子疼吃什么药| 嗓子疼看什么科室| s 是什么意思| 阶段性是什么意思| 电位是什么| 拔完牙不能吃什么| 膜拜是什么意思| 财年是什么意思| 下午四五点是什么时辰| 警察是什么生肖| 高原反应有什么症状| 阿鼻地狱是什么意思| 西安和咸阳什么关系| 什么品牌蓝牙耳机好| 玄色是什么颜色| 松鼠吃什么| 痛风不能吃什么水果| 金牛座什么性格| 22年属什么生肖| 项羽是什么生肖| 四月二十一是什么星座| 空调外机不出水是什么原因| 红丹是什么| 众生是什么意思| 月字旁有什么字| 小肠炖什么好吃又营养| 欧什么意思| 禁锢是什么意思| 秘语是什么意思| 贲门炎吃什么药| 阴虚火旺有什么表现症状| 人中长痘痘什么原因| 肾积液是什么原因造成的| 木命的人适合佩戴什么首饰| 孕妇白细胞高是什么原因| 氨咖黄敏胶囊是什么药| 4.26是什么星座| 检查腰部挂什么科| 7月17是什么星座| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 企业专区 ? OpenVINO生态社区 ? 【原创】OpenCV-Python系列之开运算与闭运算(二十一)

共1条 1/1 1 跳转至

【原创】OpenCV-Python系列之开运算与闭运算(二十一)

高工
2025-08-04 21:21:10     打赏
百度 面对突发变故,出警民警沉着应对,一方面采取喊话等措施稳控局面,另一方面,紧急呼叫增援。

OpenCV-Python系列之开运算与闭运算

图像的腐蚀与膨胀是本次教程的核心——开运算与闭运算的基础,如果结构元素为圆形, 则膨胀操作可填充图像中比结构元素小的孔洞以及图像边缘处小的凹陷部分。 而腐蚀可以消除图像中的毛刺及细小连接成分, 并将图像缩小, 从而使其补集扩大。 但是, 膨胀和腐蚀并非互为逆运算, 所以它们可以结合使用。 在腐蚀和膨胀两个基本运算的基础上, 可以构造出形态学运算簇, 它由膨胀和腐蚀两个运算的复合与集合操作(并、 交、 补等)组合成的所有运算构成。 例如, 可使用同一结构元素, 先对图像进行腐蚀然后膨胀其结果, 该运算称为开运算; 或先对图像进行膨胀然后腐蚀其结果, 称其为闭运算。 开运算和闭运算是形态学运算族中两种最为重要的运算。

对于图像X及结构元素S 用符号image.png表示S对图像X作开运算, 用符号image.png表示S对图像X作闭运算, 它们的定义为:

image.png

首先需要来了解一个函数:

cv2.morphologyEx(src, op, kernel) 

参数说明:

src传入的图片

op进行变化的方式

kernel表示定义的卷积核的大小以及形状

op =  cv2.MORPH_OPEN 进行开运算,指的是先进行腐蚀操作,再进行膨胀操作

op = cv2.MORPH_CLOSE 进行闭运算, 指的是先进行膨胀操作,再进行腐蚀操作

开运算

开运算指的就是对图像先进行腐蚀操作,然后再进行膨胀操作,而通常情况下,它是对图像的明亮的区域进行操作,可以消除图像中的白噪声,现在我们来看例子,先看一幅图像:

image.png

现在我们想要消除图像中的黑色的毛刺,但是如果直接对图像进行开运算是不行的,因为开运算是对图像的明亮区域进行操作,看一下直接进行开运算会有什么效果:

import cv2
import numpy as np


img = cv2.imread('open.jpg',0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
open =cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow("img",img)
cv2.imshow("result", open)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

可以看到,图像的毛刺没有被去除,现在我们需要将原图进行阈值化翻转,也就是黑白颠倒,这样才方便进行形态学的处理,我们在前面阈值部分讲过,这里就不再讲述了,直接看代码:

import cv2
import numpy as np


img = cv2.imread('open.jpg',0)
threshold = cv2.threshold(img,0,255,cv2.THRESH_BINARY_INV|
                          cv2.THRESH_OTSU)[1]
cv2.imshow("img",img)
cv2.imshow("thres",threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()

 image.png

现在图像已经被黑白颠倒了过来,现在我们可以开始进行开运算了,当然首先也是需要定义一个卷积核的,这在上个教程中已经谈到,在这里我们定义一个3*3的矩形卷积核:

import cv2
import numpy as np


img = cv2.imread('open.jpg',0)
threshold = cv2.threshold(img,0,255,cv2.THRESH_BINARY_INV|
                          cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
open =cv2.morphologyEx(threshold,cv2.MORPH_OPEN,kernel)
cv2.imshow("img",img)
cv2.imshow("thres",threshold)
cv2.imshow("result", open)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

这样效果就显而易见了,如果我们将卷积核改成5*5的呢:

import cv2
import numpy as np


img = cv2.imread('open.jpg',0)
threshold = cv2.threshold(img,0,255,cv2.THRESH_BINARY_INV|
                          cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
open =cv2.morphologyEx(threshold,cv2.MORPH_OPEN,kernel)
cv2.imshow("thres",threshold)
cv2.imshow("result", open)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

这就说明操作过度了,所以对于形态学处理卷积核的适当选取是非常重要的,现在我们对处理之后的图像进行还原:

import cv2
import numpy as np


img = cv2.imread('open.jpg',0)
threshold = cv2.threshold(img,0,255,cv2.THRESH_BINARY_INV|
                          cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
open =cv2.morphologyEx(threshold,cv2.MORPH_OPEN,kernel)
result = cv2.threshold(open,0,255,cv2.THRESH_BINARY_INV|
                          cv2.THRESH_OTSU)[1]
cv2.imshow("img",img)
cv2.imshow("thres",threshold)
cv2.imshow("open", open)
cv2.imshow("result",result)
cv2.waitKey(0)
cv2.destroyAllWindows()

看一下最终还原的结果:

image.png

事实上,卷积核的灵活运用将会极大的方便图像的形态学处理,我们来进行一个实战,比如现在给出一幅图像:

image.png

我们将用开运算分别提炼出横线和竖线,我们使用13*1的卷积核进行实验:

import cv2
import numpy as np


img = cv2.imread('hengshu.jpg',0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(13,1))
open =cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow("img",img)
cv2.imshow("open", open)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

是不是很神奇,现在我们使用1*13的卷积核进行实验:

import cv2
import numpy as np


img = cv2.imread('hengshu.jpg',0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,13))
open =cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow("img",img)
cv2.imshow("open", open)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

竖线也被完美的提取出来了,在以后的项目实战中,我们将会用到这些知识,合理的过滤掉图像中多余的信息,事实上,我们还发现,处理之后的图像偏暗,没有原图那么明亮,这在下次教程中的顶帽——黑帽操作中可以进行处理。

闭运算

我们折腾了半天的开运算,现在我们来玩玩闭运算,闭运算跟开运算相反,是先膨胀再腐蚀,它通常被用来去除图像明亮区域内部的噪声。我们来看一幅图像:

image.png

现在我们将要用闭运算去除图像明亮区域内部的黑点,定义一个7*7的卷积核,我们看代码:

import cv2
import numpy as np


img = cv2.imread('close.jpg',0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(7,7))
open =cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
cv2.imshow("img",img)
cv2.imshow("open", open)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

可以看到,效果很好,现在我们来进行另一个具有实战意义的实验,先看图片:

image.png

我们需要将这些字轮廓提炼出来,并且用方框标定出来,每一行字用一个方框标定出来,当然,这个涉及到以后将要讲解的轮廓提取以及轮廓近似,但是在这里我们先进行一个实验,如果我们想将每一行字用一个方框标定出来,那么首先需要满足的条件就是每一行的字必须连在一块,形成一个整体,这样的话才可以用OpenCV提取他们整体的轮廓,进而标定出来,但现在我们看到这些字都是独立的,它们并没有连在一起,这个时候我们就可以采用闭运算了。我们来看代码:

import cv2
import numpy as np


img = cv2.imread('text1.jpg',0)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(21,5))
open =cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
cv2.imshow("img",img)
cv2.imshow("open", open)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

这样的话所有的字体连在一起,这也方便了后期的轮廓提取。

我在这里给出综合代码,大家可以玩玩:

import cv2
import numpy as np

img = cv2.imread('text1.jpg')
test = img.copy()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (19, 5))
close = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
contour, _ = cv2.findContours(close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(test, contour, -1, (0, 0, 255), 2)
for c in contour:
    x, y, w, h = cv2.boundingRect(c)
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.imshow("result", img)
cv2.imshow("test",test)
cv2.imshow("close", close)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png

第一个图是对图像的轮廓进行提取,第二个则是提取轮廓的外接矩形,是不是很有意思,这在以后都会慢慢讲述。

闭运算一般则被用于处理内部噪声情况,开运算处理外部噪声情况,所以合理的运用它们是非常重要的。


对计算机视觉感兴趣?这个社区推荐给你~

>>点击了解OpenVINO生态开发社区



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
固液法白酒是什么意思 70大寿有什么讲究 阈值是什么意思 梦见佛像是什么意思 怕冷又怕热是什么原因
什么茶解酒效果比较好 检查是否怀孕挂什么科 12岁是什么礼 舌头边上有锯齿状是什么原因 紫外线过敏用什么药
什么是电信诈骗 右肋骨下方隐隐疼痛是什么原因 心脏突然剧烈跳动是什么原因 喉咙有痰是什么原因 脱敏处理是什么意思
兔子能吃什么水果 翊字五行属什么 筠字五行属什么 改姓氏需要什么手续 什么的嘴
cnc是什么牌子520myf.com 检查血液挂什么科hcv9jop2ns9r.cn 百香果什么味道imcecn.com 肾病什么症状shenchushe.com 通草和什么炖最催奶了hcv8jop8ns5r.cn
屈髋是什么姿势hcv9jop2ns6r.cn crp是什么检查项目hcv8jop6ns5r.cn 茶叶里面含有什么成分hcv9jop1ns2r.cn 1963年属什么生肖hcv8jop8ns9r.cn 现在适合做什么生意hcv9jop5ns4r.cn
大雄宝殿供奉的是什么佛hcv9jop7ns5r.cn 吃丝瓜有什么功效和作用hcv8jop2ns8r.cn 腹胀是什么原因引起的hcv9jop1ns8r.cn 洋葱对肝脏有什么好处hcv8jop5ns9r.cn 排卵期有什么明显症状hcv8jop6ns9r.cn
狮子座是什么象hcv7jop9ns9r.cn 甲状腺结节不能吃什么东西tiangongnft.com 荨麻疹吃什么中药hcv7jop6ns5r.cn 双顶径是什么xscnpatent.com 脸无缘无故的肿是什么原因hcv9jop7ns0r.cn
百度