Opencv 学习笔记:精准提取图像中的水平线 / 垂直线(形态学操作实战)

在表格识别、文档分析等场景中,精准提取水平线和垂直线是核心需求。本文通过形态学腐蚀 + 膨胀的组合操作,演示如何针对性提取图像中的水平线 / 垂直线,新手可直接复用。

核心代码实现

python 复制代码
import cv2 as cv
import numpy as np

# 1. 读取图像并校验
src = cv.imread(".\image\7.bmp")
if src is None:
    print('could not load image')
    exit()

# 2. 自适应窗口显示原图
cv.namedWindow('src', cv.WINDOW_NORMAL)
cv.resizeWindow('src', 800, 400)
cv.imshow("src", src)

# 3. 预处理:灰度化+反向二值化(线条转为白色)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 180, 255, cv.THRESH_BINARY_INV)

# 4. 计算横竖线核尺寸(适配图像尺寸自动调整)
a = int(gray.shape[0]/32)  # 垂直线核宽度
b = int(gray.shape[1]/64)  # 水平线核高度

# 5. 创建结构化元素(横竖线专用核)
kernel_v = cv.getStructuringElement(cv.MORPH_RECT, (a, 1))  # 垂直线核(高1,宽a)
kernel_h = cv.getStructuringElement(cv.MORPH_RECT, (1, b))  # 水平线核(宽1,高b)

# 6. 提取水平线:腐蚀+膨胀(开运算等价操作)
eroded = cv.erode(binary, kernel_h)
dilated = cv.dilate(eroded, kernel_h)

# 7. 显示提取结果
cv.namedWindow('outimage', cv.WINDOW_NORMAL)
cv.resizeWindow('outimage', 800, 400)
cv.imshow('outimage', dilated)

cv.waitKey(0)
cv.destroyAllWindows()

关键知识点解析

1. 横竖线提取核心逻辑

线条类型 结构化元素(核) 操作原理 核尺寸计算逻辑
垂直线 (a, 1) 宽为 a、高为 1 的矩形核,仅保留垂直方向像素 基于图像高度shape[0]按比例计算
水平线 (1, b) 宽为 1、高为 b 的矩形核,仅保留水平方向像素 基于图像宽度shape[1]按比例计算

2. 核心操作说明

  • 反向二值化(THRESH_BINARY_INV):将线条转为白色、背景转为黑色,符合形态学操作的像素分布要求;
  • 腐蚀 + 膨胀:等价于开运算,既能保留目标线条,又能消除无关噪点,避免单一线条提取不完整;
  • 核尺寸自适应 :通过shape[0]/32、shape[1]/64按比例计算核尺寸,适配不同分辨率图像,无需手动调参。

3. 扩展技巧

  • 提取垂直线:将代码中kernel_h替换为kernel_v即可;
  • 同时提取横竖线:分别提取后通过cv.bitwise_or合并结果;
  • 优化线条完整性:若线条断裂,可将腐蚀 / 膨胀操作替换为闭运算(cv.morphologyEx(..., cv.MORPH_CLOSE, kernel))。

总结

  1. 提取横竖线的核心是专用结构化元素 :水平线用(1, 高度)核,垂直线用(宽度, 1)核;
  2. 腐蚀 + 膨胀组合操作可有效过滤噪点,保证线条提取的纯净度;
  3. 按图像尺寸比例计算核尺寸,可适配不同分辨率的图像。
相关推荐
差不多的周周15 小时前
《骨架上下文:基于零镜头骨架的动作识别的骨架侧上下文提示学习》论文核心部分详解
学习
Century_Dragon16 小时前
从挂图到VR:汽修专业的一堂新能源原理课可以怎么上~
学习
知识分享小能手17 小时前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
New农民工18 小时前
倒立摆训练秘籍:理解训练参数
学习
L@ncor18 小时前
第五章 基于低代码平台的智能体搭建 · 学习笔记(Coze / Dify / FastGPT / n8n)
笔记·学习·低代码·agent·prompt工程
知潮网18 小时前
被嫌弃的五仁月饼,一吨千元在养猪场翻了身
笔记
2601_9606312318 小时前
中药前处理及提取的工艺环节与技术要点
笔记
2601_9653842619 小时前
口腔黏膜清洁中的几何约束与流体动力学边界层问题分析
经验分享·笔记
迪丽热爱19 小时前
多媒体应用20-903(补)
学习
一米阳光866119 小时前
软考高级【信息系统项目管理师】高项重要考点(9)组织 助你顺利上岸!
笔记·职场发展·软考·高项·信息系统项目管理师·高级职称