13-形态学操作应用-提取水平与垂直线

形态学:提取横线、竖线 原理 OpenCV官网教程 通过使用不同形状的核,得到不同的结果 提取横线: 经过先腐蚀,再膨胀,得到直线。 提取竖线: 经过先腐蚀,再膨胀,得到竖线。 代码 官方API void cv::adaptiveThreshold( InputArray src,      // 输入图像 OutputArray dst,      //输出图像 dou... 阅读详情

掌握

1、提取水平与垂直线的原理方法(通过开操作(膨胀和腐蚀)提取水平和垂直线);
2、实现步骤;
3、代码演示;

原理

1、关键:通过自定义的结构元素,使结构元素对输入图像的一些对象敏感,另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出,通过两个基本的形态学操作–膨胀和腐蚀,使用不同的结构元素实现对输入图像的操作,得到想要的结果;
2、膨胀–最大值滤波(区域最大像素值输出);
3、腐蚀–最小值滤波(区域最小像素值输出);
4、对于水平线,通过定义水平线的结构元素去除垂直线的干扰,对于垂直线,通过定义垂直线的结构元素去除干扰;
在这里插入图片描述

膨胀原理:取结构元素覆盖下的最大像素值;

在这里插入图片描述

腐蚀原理: 取结构元素下的最小像素值;

在这里插入图片描述

结构元素形状定义:支持自定义任何形状;

在这里插入图片描述

提取步骤

threshold:阈值
adaptivethreshold: 自适应阈值
在这里插入图片描述

相关API

adaptivethreshold():自适应阈值函数,将灰度图像转换为二值图像;
参考博文:

https://blog.youkuaiyun.com/sinat_36264666/article/details/77586964

参数含义如下:

demo:
adaptiveThreshold(~gray_src, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
int adaptiveMethod : 自适应方法:一般选ADAPTIVE_THRESH_MEAN_C;
int thresholdtype : 阈值类型,二值图像:THRESH_BINARY;

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

Code

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	Mat src = imread("C:\\Users\\hello\\Desktop\\12.jpg");
	Mat dst;
	if (!src.data)
	{
		cout << "could not load the image..." << endl;
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);

	char OUTPUT_WIN[] = "result image";
	namedWindow(OUTPUT_WIN, CV_WINDOW_AUTOSIZE);

	//转换为灰度图像
	Mat gray_src;
	cvtColor(src, gray_src, CV_BGR2GRAY);
	imshow("gray image", gray_src);
	//转换为二值图像 自适应阈值进行转换  注意 : 灰度图像取反,设置背景为黑色,目标为白色
	Mat binImg;
	adaptiveThreshold(~gray_src, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
	imshow("binary image", binImg);

	//设置膨胀腐蚀结构元素形状 -- 水平线和垂直线
	Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols / 16,1));  //水平线
	Mat vline = getStructuringElement(MORPH_RECT, Size(1, src.rows / 16));  //垂直线
	
	//提取水平线: 开操作(先腐蚀后膨胀)
	//Mat temp;
	//erode(binImg, temp, hline);
	//dilate(temp, dst, hline);
	//bitwise_not(dst, dst);  //颜色翻转与原图一致

	//提取垂直线, 开操作可以调用:morphologyEx()函数
	//Mat temp1;
	//erode(binImg, temp1, vline);
	//dilate(temp1, dst, vline);
	//bitwise_not(dst, dst);
	//morphologyEx(binImg, dst, CV_MOP_OPEN, vline);//膨胀操作API
	//bitwise_not(dst, dst);
	//提取完后滤波一下可以使图像更圆滑
	//blur(dst, dst, Size(3, 3), Point(-1, -1));
	//imshow(OUTPUT_WIN, dst);

	//定义一个 矩形结构元素    去干扰线
	Mat kernel = getStructuringElement(MORPH_RECT, Size(7, 7));
	morphologyEx(binImg, dst, CV_MOP_OPEN, kernel);
	bitwise_not(dst, dst);
	imshow(OUTPUT_WIN, dst);

	waitKey(0);
	return 0;
}

效果

水平线提取效果:(使用水平结构元素)

在这里插入图片描述

垂直线提取效果:(使用垂直结构元素,输出图像均值滤波了一下,更光滑,生成二值图像翻转了颜色)

在这里插入图片描述

提取字母:(使用矩形结构元素,滤除干扰线)

在这里插入图片描述

二值图像,灰度图像,彩色图像的区别

二值图像: 每个像素只用1bit表示,只有黑白两种色;

二值图像(Binary Image),按名字来理解只有两个值,0和1,0代表黑,1代表白,或者说0表示背景,而1表示前景。其保存也相对简单,每个像素只需要1Bit就可以完整存储信息。如果把每个像素看成随机变量,一共有N个像素,那么二值图有2的N次方种变化,而8位灰度图有255的N次方种变化,8为三通道RGB图像有255255255的N次方种变化。也就是说同样尺寸的图像,二值图保存的信息更少。二值图像(binary image),即图像上的每一个像素只有两种可能的取值或灰度等级状态,人们经常用黑白、B&W、单色图像表示二值图像。

灰度图像:每个像素用一个通道(8位,16位…)表示,像素值从最暗到最白;

灰度图像是二值图像的进化版本,是彩色图像的退化版,也就是灰度图保存的信息没有彩色图像多,但比二值图像多,灰度图只包含一个通道的信息,而彩色图通常包含三个通道的信息,单一通道的理解可以理解为单一波长的电磁波,所以,红外遥感,X断层成像等单一通道电磁波产生的图像都为灰度图,而且在实际中灰度图易于采集和传输等性质的存在导致基于灰度图像开发的算法非常丰富。

灰度图像(gray image)是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度(如果用16位,则有65536级)。

彩色图像:RGB图像,每个像素由3个通道进行表示;

彩色图像,每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于(0,255)。

机器人视觉,,

【VC++、OpenCV3.4】提取水平和垂直线 很多实际的项目中都会遇到线的提取。比如航拍图片中的电缆线提取,道路交通中的标记线提取(自动驾驶会用到),航母上飞机跑道线的提取等。非常实用也非常重要 原理方法: 图像形态学操作的时候,可以通过自定义的结构元素实现结构元素对输入图像的一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。通过使用两个最基本的心态学操作——膨胀和腐蚀,使用不同的结构元素对输入图像的操作、... 阅读详情

相关推荐

逆向实战:拼多多anti-content加密参数的全链路解析与动态对抗策略

本文深入解析了拼多多anti-content加密参数的全链路生成逻辑与动态对抗策略。通过逆向工程实战,详细拆解了包含设备指纹、用户行为采集和动态密钥生成在内的12个关键环节,并提供了可持续对抗的精准模拟方案和自动化更新机制,帮助开发者有效应对拼多多的反爬体系。

weixin_30687051的博客 159

【图像处理】Matlab图像边缘检测与直线提取

使用Matlab图像边缘检测和直线提取。通过选取感兴趣区域,用户可以选择需要处理的图像部分。随后,对选取的区域进行亮度调整、直方图均衡化和自适应直方图均衡化等预处理操作,以增强图像的细节和对比度。然后,将预处理后的图像转换为灰度图像,并使用Sobel算子进行边缘检测。最后,利用霍夫变换方法从边缘图像中提取直线信息,并将检测到的直线绘制在原图像上,以帮助用户分析图像中的线条结构。

ranmaxli的博客 2280

centos7下100T存储扩容(LVM)至150T

查看新增磁盘情况lsblk,fdisk -l [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 4.2G 0 rom vda 252:0 0 80G 0 disk ├─vda1 252:1 0 1G 0 part /boot └─vda2 252:2

tiyager的博客 1024

图像处理之提取水平线和垂直线

提取图像中的水平线和垂直线,是对图像的处理非常有好处的,能够筛选出对自己有用的、感兴趣的部分。比如从富有干扰杂质的验证码中提取干净的验证码。 从这样:  变成这样: 就可以轻松看出验证码了。当然,这只是其中的一个小例子,还有很多实例等着去开发。 下面回到我们的主题,提取水平线和垂直线,我们首先要将图像灰度化,然后再二值化,最后进行形态学的操作(腐蚀和膨胀),达到提取水平和垂直线的要求。下

星影L的博客 1万+

Qt图表库三选一:Qwt、QChart、QCustomPlot实战性能对比与避坑指南

本文深入对比了Qt开发中三大主流图表库Qwt、QChart和QCustomPlot的性能与适用场景。通过实测数据展示各库在渲染效率、内存占用和功能特性上的差异,并提供针对不同项目需求的选型建议和集成避坑指南,帮助开发者高效选择最适合的Qt图表解决方案。

weixin_33691700的博客 449

多核系统核间通信(IPC)设计:从硬件机制到软件实现

在多核处理器与嵌入式系统设计中,核间通信(IPC)是实现计算资源协同工作的核心技术。其原理基于共享内存、硬件邮箱与中断等底层硬件机制,通过构建结构化的消息传递通道,实现核间高效、可靠的数据交换。该技术的核心价值在于打破多核间的壁垒,将分散的计算单元整合为有机整体,从而显著提升系统整体性能与响应能力。在工程实践中,IPC广泛应用于智能座舱、边缘AI网关、实时控制系统等场景,用于处理如仪表显示、AI推理、实时控制等复杂任务。本文聚焦于基于共享内存与VRING的消息队列实现,深入剖析缓存一致性、内存屏障等关键问题

weixin_27006759的博客 593

图像处理-形态学操作应用-提取水平与水直线

1. 自适应阈值简介自适应阈值(adaptiveThreshold())用于二值化处理图像,对于对比大的图像有较好效果,相对于固定阈值化操作(t’h)是指图像中每一个像素点是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。这样做的好处:每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的。亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适应地变小。膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值。,使用不同的结构元素实现对输入图像。

yichen4265的博客 1552

001、专栏导论:为什么我们需要MLIR与算子中间表示

五年前,大家还在争论“TVM还是XLA”。现在回头看,TVM的Relay IR和XLA的HLO都是特定领域的IR,它们解决了各自的问题,但缺乏通用性。MLIR的出现,本质上是因为硬件异构化已经到了一个临界点——CPU、GPU、NPU、DSP、FPGA,每个硬件都有自己的指令集和内存层次,没有一个统一的IR能同时高效表达所有硬件的计算模式。MLIR的“方言+渐进式lowering”模式,恰好提供了这种灵活性。你可以为每个硬件定制一套方言,然后共享公共的lowering路径。

Jack010169的博客 485

OpenCVSharp - 利用形态学操作去除水平线

OpenCVSharp跑一遍OpenCV官方教程(全为手敲代码,如有雷同都是我的错) 利用形态学操作去除水平线 OpenCV教程链接:https://docs.opencv.org/4.5.0/dd/dd7/tutorial_morph_lines_detection.html 核心语句 erode() dilate() getStructuringElement() using System; using OpenCvSharp; namespace ConsoleApp1 { .

jimtien的专栏 767

KNN算法实现数据分类及matlab完整代码

其基本思想是:对于一个未知样本,找出与该样本距离最近的k个已知样本,然后根据这k个样本的类别来确定该未知样本的类别。在本文中,我们采用iris数据集,该数据集包含四个属性:花萼长度、花萼宽度、花瓣长度、花瓣宽度,以及三个类别:山鸢尾、变色鸢尾、维吉尼亚鸢尾。KNN算法具有简单、直观、易于理解等特点,适用于多分类和二分类问题,但其计算复杂度随着样本数量的增加而增加,也容易受异常值影响。在KNN算法中,常用的距离函数有欧氏距离、曼哈顿距离等。(2)选择距离最近的k个样本,并根据它们的类别来确定未知样本的类别。

qq_39605374的博客 1515

软件设计师---程序设计语言

软件设计师---程序设计语言

我从不打没有准备的仗! 2万+

13.形态学操作应用——提取水平和垂直线

主要内容: 形态学操作的应用——提取水平与垂直线原理方法 实现步骤 原理方法 图像形态学操作的时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出,通过使用两个基本的形态学操作——膨胀(dilate)和腐蚀(erode),使用不同的结构元素实现对输入图像的操作,得到想要的结果。(理解对比开操作和闭操作) 膨胀——...

罗伊的博客 615

SKUA-GOCAD入门教程-第八节 线的创建与编辑7和8

本文介绍了曲线编辑操作的主要功能,包括曲线部分和区域的管理操作。在曲线部分操作方面,详细说明了如何合并、删除、移动和过滤曲线部分,支持精确或带公差的合并方式。在曲线区域操作方面,阐述了保留/删除区域点、移动区域点、保留/删除区域线段等操作。此外还介绍了节点连接功能,包括新增/删除连接、端点连接以及为曲线赋予地质特征的方法。

江洋大葱的博客 390

13 - 形态学操作应用一 :提取水平线和垂直线

13 - 形态学操作应用一 提取水平线和垂直线 代码和注释: #include<opencv2/opencv.hpp>; #include<iostream>; #include<opencv2/imgproc/types_c.h>; using namespace std; using namespace cv; int main(int argc...

lyjaoruiqiyuan的博客 321

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OpenCV13形态学操作应用-提取水平与垂直线_字符识别

/* by txwtech 形态学操作应用-提取水平与垂直线_字符识别 原理方法 图像形态学操作时候,可以通过自定义的结构元素实现结构元素 对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏 感的对象改变而不敏感的对象保留输出。通过使用两个最基本的 形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像 的操作、得到想要的结果。 - 膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值 - 腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值 上述膨胀与腐蚀过程可以使用任意的结构元素 .

Txwtech 458

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[CV] OpenCV图像处理教程-13:形态学操作应用-提取水平与垂直线

转载于:https://www.cnblogs.com/ecoflex/p/10829200.html

weixin_30794491的博客 107

opencv::形态学操作应用-提取水平与垂直线

原理方法 -图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。 -通过使用两个最基本的形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像的操作、得到想要的结果。 - 膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值 - 腐...

dianyun7150的博客 261

opencv形态学操作,提取水平与垂直线

int main(int argc, char *argv[]) { Mat src=imread("./1/3.jpg"); if(!src.data) return -1; //可做验证码识别 Mat temp,temp1; cvtColor(src,temp,CV_BGR2GRAY); imshow("temp",temp);...

qq_42503022的博客 861

第13课 提取水平与垂直线

目录1.原理方法2.步骤2.1输入彩色图像2.2 转化为灰度图像2.3 转化为二值图像2.3 定义结构元素2.4 开操作(腐蚀+膨胀)2.5 后处理3. 例程 课程视频链接 1.原理方法 通过自定义的结构元素,实现结构元素对输入图像的一些对象敏感,另一些对象不敏感,从而就可以让敏感的对象改变而不敏感的对象保留。通过两个最基本的形态学操作——膨胀与腐蚀,使用不同的结构元素对输入图像的进行操作,得到想...

weixin_42877426的博客 489

<LearnOpenCV13>提取水平和垂直线

原理方法 图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏 感的对象改变而不敏感的对象保留输出。通过使用两个最基本的形态学操作 – 膨胀与腐蚀,使用不同的结构元素实现对输入图像 的操作、得到想要的结果。 膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值 腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值 二值图像与灰度图...

weixin_42255569的博客 341

(13)形态学操作应用-提取水平与垂直直线

/* *形态学操作应用-提取水平与垂直直线 有很多种方法都可以提取到水平和垂直的线,但是要找出一种最适合你项目运用的,贴近你项目实际需求包括软件和硬件的需求的计算的速度等等各方面能符合你要求的一个提取的方法还是很不容易的 *原理方法 图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感,另外一些对象不敏感,这样就会让敏感的对象改变 ...

nuc_Sheryl的博客 670

(16)提取水平和垂直线

提取水平和垂直线,就是应用之前学的开 和关的操作来实现。 具体知识点,看这个博客:https://blog.youkuaiyun.com/qq_25343557/article/details/78691828 ================================================ 下面是实现提取竖直线 ===============================...

weixin_30267785的博客 168

【youcans 的图像处理学习课】11. 形态学图像处理(中)

冈萨雷斯《数字图像处理(第四版)》第9章学习笔记,包括算法的完整例程和运行结果。

youcans的博客 1691

学习c++版opencv3.4之13-形态学操作的应用

使用形态学操作提取水平与垂直线。 #include &lt;opencv2/opencv.hpp&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; using namespace cv; Mat src ,gray_src, dst; int main(){ src = imrea...

u010397980的博客 298

OpenCV基础课程笔记13提取水平竖直线

写在前面 一般提取水平竖直线都是相对于二值图像来说的,要先对原始图像二值化处理。 代码只跑找到竖线的算法(横线换一个结构体就行了) 代码 #include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat src = imread("A:\\专用\\TestForTheCV\\class13水平垂直线.jpg"); imshow("图片

爱和九九的博客 554

python closed_python实现开闭操作

目录:开闭操作的作用(一)开操作(二)闭操作(三)开操作完成其他任务(1)提取水平垂直线(2)消除干扰线(3)提取满足要求的形状开闭操作的作用:(一)开操作(特点作用:消除噪点-----去除小的干扰块,而不影响原来的图像。先腐蚀后膨胀)1 importcv2 as cv2 importnumpy as np34 defcamp(val1,val2):5 pv = val1 +val26 ...

weixin_39765290的博客 766
上一篇: 12-形态学操作
下一篇: 14-图像金子塔-上采样与降采样
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值