一、 图像形态学处理的概念

在机器视觉中,我们获得一张图片首先要进行预处理,去掉噪声等杂乱的地方,突出我们感兴趣的区域,数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。图像形态学处理中我们感兴趣的主要是二值图像,今天我们用OpenCVSharp进行图像的预处理,二值化、腐蚀和膨胀的操作,将下面图片感兴趣区域“工控上位机”给提取出来。

二、二值化、腐蚀和膨胀简介

二值化:

图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。

膨胀和腐蚀:

膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的。

① 膨胀

是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的。A被B膨胀是所有位移z的集合,这样, 和A至少有一个元素是重叠的。我们可以把上式改写为:

结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的。

⑴ 用结构元素B,扫描图像A的每一个像素

⑵ 用结构元素与其覆盖的二值图像做“与”操作

⑶ 如果都为0,结果图像的该像素为0。否则为1

② 腐蚀

对Z中的集合A和B,B对A进行腐蚀的整个过程如下:

⑴ 用结构元素B,扫描图像A的每一个像素

⑵ 用结构元素与其覆盖的二值图像做“与”操作

⑶ 如果都为1,结果图像的该像素为1。否则为0

腐蚀处理的结果是使原来的二值图像减小一圈。

三、实现代码:

1、读取获得灰度图片:

src_Gray = new Mat("工控上位机.png", ImreadModes.Grayscale);

bitmap_Gray = BitmapConverter.ToBitmap(src_Gray);

pictureBox1.Image = bitmap_Gray;

2、二值化灰度图片:

Cv2.Threshold(src_Gray, src_Threshold, 50, 255, ThresholdTypes.Binary);

bitmap_Threshold = BitmapConverter.ToBitmap(src_Threshold);

pictureBox2.Image = bitmap_Threshold;

3、膨胀得到的二值化图片

if(bitmap_Gray!=null)

{

InputArray kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(trackBar1.Value*2+1, trackBar1.Value * 2 + 1), new OpenCvSharp.Point(-1, -1));

Cv2.Dilate(src_Threshold, src_Dilate, kernel);

bitmap_Dilate = BitmapConverter.ToBitmap(src_Dilate);

pictureBox3.Image = bitmap_Dilate;

textBox1.Text = trackBar1.Value.ToString();

}

4、对膨胀过的图像进行腐蚀处理:

if (bitmap_Dilate != null)

{

InputArray kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(trackBar2.Value * 2 + 1, trackBar2.Value * 2 + 1), new OpenCvSharp.Point(-1, -1));

Cv2.Erode(src_Dilate, src_Erode, kernel);

bitmap_Erode = BitmapConverter.ToBitmap(src_Erode);

pictureBox4.Image = bitmap_Erode;

textBox2.Text = trackBar2.Value.ToString();

}

效果预览:

四、API介绍

(1)cv2.threshold()二值化

参数1:src:表示的是图片源

参数2:thresh:表示的是阈值(起始值)

参数3:maxval:表示的是最大值

参数4:type:表示的是这里划分的时候使用的是什么类型的算法常用值为0(cv2.THRESH_BINARY)

(2)Cv2.GetStructuringElement(): 获取结构元素

参数1:MorphShapes shape 结果元素的形状,枚举类型

参数2:Size ksize 结构元素的大小

参数3:Point anchor 结构元素的锚点(中心点)

(3)Cv2.Dilate(): 膨胀,通过使用特定的结构元素来扩展图像。

参数1:参数1:InputArray src 源图像

参数2:OutputArray dst 输出图像

参数3:InputArray element 结构元素,一定要是奇数

参数4:Point? anchor = null 锚点位置,默认是null

参数5:int iterations = 1 应用膨胀的次数。[默认情况下这是1]

参数6:borderType = BorderTypes.Constant 图像边缘处理方法。[默认情况下这是BorderType.Constant]

参数7:Scalar? borderValue = null 在边界为常数的情况下的边界值。默认值具有特殊意义。[默认情况下这是cvcp . morphologydefaultbordervalue ()]

(4)Cv2.Erode(): 腐蚀,通过使用特定的结构元素来侵蚀图像。

参数1:InputArray src 源图像

参数2:OutputArray dst 输出图像

参数3:InputArray element 结构元素 ,一定要是奇数

参数4:Point? anchor = null 锚点位置,默认是null

参数5:int iterations = 1 应用侵蚀的次数。[默认情况下这是1]

参数6:borderType = BorderTypes.Constant 图像边缘处理方法。[默认情况下这是BorderType.Constant]

参数7:Scalar? borderValue = null 在边界为常数的情况下的边界值。默认值具有特殊意义。[默认情况下这是cvcp . morphologydefaultbordervalue ()]

五、如需要完整代码可先关注并留言,然后私信我发送“形态学”即可自动回复。

2.2 获取图像感兴趣区域_超火的机器视觉OpenCVSharp学习笔记3——图像形态学处理...相关推荐

  1. 图像的像素原点_超火的机器视觉OpenCVSharp学习笔记3——图像形态学处理

    一. 图像形态学处理的概念 在机器视觉中,我们获得一张图片首先要进行预处理,去掉噪声等杂乱的地方,突出我们感兴趣的区域,数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域 ...

  2. 2.2 获取图像感兴趣区域_几何变换图像裁剪

    基于FPGA图像的裁剪 1 几何变换介绍 几何变换:从新规定图像内像素的几何排列方式. 几何变换包括:缩放.旋转.平移等.这些变换一般用于校正图像处理引起的空间失真,或者通过将图像配准到一个预定义的坐 ...

  3. 2.2 获取图像感兴趣区域_基于Hu距的图像旋转矫正之OpenCV实现

    目录 1.常见图像旋转矫正方法 1.1 基于图像边缘轮廓的旋转矫正 1.2 基于傅里叶变换以及霍夫直线检测的旋转矫正 2.基于Hu距图像旋转矫正 2.1 Hu旋转不变性 2.2 实现步骤 2.2.1 ...

  4. 提取图像感兴趣区域_从图像中提取感兴趣区域

    提取图像感兴趣区域 Welcome to the second post in this series where we talk about extracting regions of intere ...

  5. 2.2 获取图像感兴趣区域_DIC (数字图像相关法)

    数字图像相关法(digital image correlation DIC),又称数字散斑相关法,是将试件变形前后的两幅数字图像,通过相关计算获取感兴趣区域的变形信息.其基本原理是,对变形前图像中的感 ...

  6. python+opencv 获取图像属性,获取图像感兴趣区域ROI

    1.获取图像属性 1.1获取图像形状 img.shape:灰度图像返回高.宽两个参数,彩色图像返回高.宽.通道数三个参数 读取彩色图片: # -*- coding:utf-8 -*- import c ...

  7. OpenCV实战(3)——图像感兴趣区域

    OpenCV实战(3)--图像感兴趣区域 0. 前言 1. 感兴趣区域 1.1 ROI 实例 1.2 定义 ROI 2. 使用图像掩码 3. 完整代码示例 小结 系列链接 0. 前言 在实际应用场景下 ...

  8. 活动作品计算机视觉课程第七讲-带你简单快速学习2021年春晚背后刘德华与背景分离切换到另一场景视觉算法(中集):OpenCV4图像分割提取图像任意感兴趣区域

    计算机视觉课程第七讲-带你简单快速学习2021年春晚背后刘德华与背景分离切换到另一场景视觉算法(中集):OpenCV4图像分割提取图像任意感兴趣区域 本专栏将会带大家学习 <计算机视觉与图形学& ...

  9. 基于python的移动物体检测_感兴趣区域的移动物体检测,框出移动物体的轮廓 (固定摄像头, opencv-python)...

    感兴趣区域.特定区域.框出移动物体的轮廓.越界检测.入侵物体检测.使用 opencv-python库的函数cv2.findContours.cv2.approxPolyDP.cv2.arcLength ...

最新文章

  1. 测试网站访问速度的5个方法
  2. 《秋暮登北楼》王武陵
  3. ReferenceError: XXX is not defined 错误及解决办法
  4. 离散信号频谱matlab代码,离散信号MATLAB频谱分析程序
  5. 计算机处理器的参数及意义,如何看懂CPU的性能参数?
  6. 多线程总结之旅(1):线程VS进程
  7. (转)多因子模型水平测试题
  8. WA47 电子管麦克风
  9. virtualbox报错 提示:E_FAIL (0x80004005)
  10. c语言 char * 遍历,使用指针遍历char数组
  11. RTSP数据的无插件播放与超图三维iClient3D的视频投射
  12. OPA1612AIDR IC AUDIO 2 CIRCUIT 8SOIC
  13. Idea多次启动同一个服务
  14. 当当网高可用架构之道
  15. H.266/VVC相关技术学习笔记4:HEVC和VVC中块划分的差别
  16. ipa文件包获取服务器地址,iOS获取App ipa包以及资源文件
  17. Qt多语言实现和动态切换(国际化)
  18. docker for windows下载和安装-Windows10版本
  19. 电力电子技术-整流电路1
  20. android实现MP3播放器

热门文章

  1. 前端诸神大战,Vue、React 依旧笑傲江湖
  2. 倒计时1天,盛会将至,长沙 · 1024程序员节全日程曝光(附参会指南)
  3. 万字长文!搞定逃不脱的 DNS 面试题
  4. 春眠不觉晓,Kubernetes知多少
  5. 字节跳动武汉招聘 2000 人,距离大厂 Offer,你还差这篇 Java 干货!| 原力计划...
  6. 投毒、伪装、攻击,DNS 欺骗和钓鱼网站如何一步步诱人掉入陷阱?
  7. 2020 开春程序员面试必备!拿走不谢!
  8. 防止开源的加拉帕戈斯综合症,系统软件和开源都是手段不是目的
  9. Pandas 中第二好用的函数是?
  10. 百度回应李彦宏卸任百度云执行董事;甲骨文拟增聘 2000 员工拓展云服务;PostgreSQL 12 正式发布 | 极客头条...