OpenCV学习第十三篇:提取水平和垂直线(去除干扰线)

2023-11-01

1.结构元素
可以是任意形状的结构元素:矩形,圆,直线,磁盘形状,砖石形状等
2.提取步骤
输入图像彩色图像imread
转换为灰度图像cvtColor
转换为二值图像adaptiveThreshold
定义结构元素
开操作(腐蚀+膨胀)提取水平和垂直线
3.api
adaptiveThreshold-转化为二值图像(
Mat src(输入灰度图像),
Mat dest(二值图像),
double maxValue(二值图像最大值),
int adaptiveMethod(自适应方法)(ADAPTIVE_THRESH_MEAN_C/ADAPTIVE_THRESH_GAUSSIAN_C),
int thresholdType(阈值类型),
int blockSize(块大小),
double c(常量c可以是正数,0,负数)

直接提取api
morphologyEx(binimage, dst, CV_MOP_OPEN, hline);
4.实例
代码如下:

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

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	Mat src, dst;
	src = imread("F:/picture/去除干扰线.png");
	if (src.empty()) {
		printf("could not image");
		return -1;
	}
	Mat  gray_src;
	cvtColor(src, gray_src, CV_BGR2GRAY);
	imshow("灰色", gray_src);

	//转换为二值图像
	Mat binimage;
	adaptiveThreshold(~gray_src, binimage, 255, ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 15, -2);
	imshow("二值", binimage);
	Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols / 16,1), Point(-1, - 1));
	Mat yline = getStructuringElement(MORPH_RECT, Size(1, src.rows/16), Point(-1, -1));
	Mat sline = getStructuringElement(MORPH_RECT, Size(3,3), Point(-1, -1));
	Mat temp;
	erode(binimage, temp, sline);
	dilate(temp, dst, sline);
	//morphologyEx(binimage, dst, CV_MOP_OPEN, hline);
	//blur(dst, dst, Size(3, 3), Point(-1, -1));
	bitwise_not(dst, dst);

	imshow("水平线", dst);	
	imshow("测试", src);
	waitKey(0);
	return 0;
}

效果如下:

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV学习第十三篇:提取水平和垂直线(去除干扰线) 的相关文章

随机推荐

  • flutter 使用阿里图标

    1 下载图标 阿里图标 2 解压 将iconfont ttf放入lib assets icons内 解压下载的阿里图标文件 我们只需要里面的iconfont ttf文件 将iconfont ttf文件放入lib assets icons内
  • hadoop资料汇总贴

    一 Hadoop快速入门 分布式计算开源框架Hadoop 入门实践 福布斯 Hadoop 你不得不了解的大数据工具 用 Hadoop 进行分布式数据处理 入门 Hadoop入门 一图解说Hadoop的发展历程 讨论 Hadoop社区与中国云
  • C语言进阶——动态内存管理

    作者 敲代码 流川枫 博客主页 流川枫的博客 专栏 C语言从入门到进阶 语录 Stay hungry stay foolish 工欲善其事必先利其器 给大家介绍一款超牛的斩获大厂offer利器 牛客网 点击免费注册和我一起刷题吧 文章目录
  • 单片机项目实训

    把时髦的技术挂在嘴上 不如把过时的技术记在心里 目录 一 单片机项目实训 项目实战 基于NRF905的多点温度无线采集系统 项目实战 基于NRF24L01的多点温湿度无线采集系统 项目实训 篮球计分系统设计 无线nRF905版本 项目实训
  • 鸿蒙珠融入体内,斗罗大陆同人小说排行榜。第一名:《斗罗大陆之超级无敌》:主角...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 斗罗大陆同人小说排行榜 第一名 斗罗大陆之超级无敌 主角玉天龙被鸿蒙紫珠带着穿越到斗罗大陆 遁入柳二龙体内 柳二龙未与他人交合 便生下玉天龙 斗罗大陆之超级无敌 这本书拥有系统 鸿蒙紫珠 召唤技
  • 项目开发中常见问题汇总

    已经在拦截中配置访问静态资源不拦截 但是在访问静态资源时 仍然出现404错误 解决办法 在配置文件中配置 spring mvc static path pattern static spring web resources static l
  • VC6与VISIO2007的冲突

    装了VC6 在 文件 gt 打开 时会出错 以下是查到的解决方法 如果在VC6 0中的 FileView 右键点 add files to folder 或者在Project菜单点Add to project Files都会报devshl
  • element表格实现溢出隐藏单元格增加复制按钮

    此功能可以实现只写一个公共复制按钮 可以在多个页面的表格中使用 项目框架为vue 用到了element ui vuex clipboard 如果不想使用vuex 则需要想办法把复制按钮的位置x y坐标写成公共的变量 1 复制按钮 如果整个项
  • 使用dd命令制作Ubuntu U盘启动盘(使用U盘启动盘安装Ubuntu系统)

    1 查看挂载的U盘的设备名称 sudo fdisk l 2 如果U盘还在挂载状态 卸载它 否则 会提示设备或资源正忙 umount dev u盘名 3 格式化U盘 sudo mkfs ntfs f dev u盘名 4 写入启动引导 sudo
  • Redis面试题(一): Redis到底是多线程还是单线程?

    0 redis单线程问题 单线程指的是网络请求模块使用了一个线程 所以不需考虑并发安全性 即一个线程处理所有网络请求 其他模块仍用了多个线程 1 为什么说redis能够快速执行 1 绝大部分请求是纯粹的内存操作 非常快速 2 采用单线程 避
  • C++泛型编程

    写在前面 0 所谓泛型编程就是独立于任何特定类型的方式编写代码 使用泛型程序时 需要提供具体陈旭实例所操作的类型或者值 我们经常用到STL容器 迭代器 和算法都是泛型编程的例子 模板是C 支持参数化多态的工具 使用模板可以使用户为类或者函数
  • 瑞芯微rockchip PX30触摸屏调试记录

    系列文章目录 瑞芯微rockchip PX30 串口调试记录 瑞芯微rockchip PX30 显示屏调试 瑞芯微rockchip PX30触摸屏调试记录 瑞芯微rockchip PX30 QT环境搭建 瑞芯微rockchip PX30 G
  • 从static变量导出问题解析 __declspec(dllexport) 和 __declspec(dllimport)的作用

    这段时间要把tinyxml从静态库弄成动态库 要用到 declspec dllexport 和 declspec dllimport 来导出dll和lib文件 终于弄明白了export和import的作用 下面从使用的角度来说明一下他们的功
  • 我用ChatGPT写神经网络:一字不改,结果竟很好用

    自从去年底推出以来 对话式 AI 模型 ChatGPT 火遍了整个社区 ChatGPT 的确是一个了不起的工具 就像一个 潘多拉魔盒 一旦找到正确的打开方式 你或许会发现 自己再也离不开它了 作为一个全能选手 人们给 ChatGPT 提出的
  • exe 网页套壳_一日一技

    Matrix 首页推荐 Matrix 是少数派的写作社区 我们主张分享真实的产品体验 有实用价值的经验与思考 我们会不定期挑选 Matrix 最优质的文章 展示来自用户的最真实的体验和观点 文章代表作者个人观点 少数派仅对标题和排版略作修改
  • JS——输入输出语法&数组的操作

    JavaScript输入输出语法 目标 能写出常见的JavaScript输入输出语法 输出语法 语法1 document write 要输出的内容 作用 向body内输出内容 注意 如果输出的内容写的是标签 也会被解析成网页元素 语法2 a
  • C#----对子窗体进行层叠排列

    欢迎大家提出意见 一起讨论 转载请标明是引用于 http blog csdn net chenyujing1234 代码 VS2008 http www rayfile com zh cn files f4235a26 9aa8 11e1
  • python中os库用法详解(总结)

    os库主要是对文件和文件夹进行操作 在Python中对 件和 件夹的操作要借助os模块 的相关功能 具体步骤如下 1 导 os模块 import os 2 使 os 模块相关功能 os 函数名 1 件重命名 os rename 标 件名 新
  • JavaScript(js)

    js 基础语法 1 与html结合使用 内部JS 定义
  • OpenCV学习第十三篇:提取水平和垂直线(去除干扰线)

    1 结构元素 可以是任意形状的结构元素 矩形 圆 直线 磁盘形状 砖石形状等 2 提取步骤 输入图像彩色图像imread 转换为灰度图像cvtColor 转换为二值图像adaptiveThreshold 定义结构元素 开操作 腐蚀 膨胀 提