python - 从图像中提取水平和垂直线

标签 python opencv image-morphology

我想提取2个蒙版中的水平和垂直线作为附加图像。

我已经尝试了形态学操作来做到这一点,

horizontalStructure = cv.getStructuringElement(cv.MORPH_RECT, (horizontal_size, 1))
verticalStructure = cv.getStructuringElement(cv.MORPH_RECT, (1, verticalsize))

但问题是,它检测到的线为矩形,然后以2条线的形式绘制,代表矩形的2个边。

有什么解决办法吗?

图片:
img

水平结果:

h

垂直结果:

v

编辑:这是我的另一张图片:

img

最佳答案

您对结构元素做了什么?您其余的代码在哪里?

我建议使用 cv2.morphologyEx 使用形态学开放,如下所示:

import cv2
import numpy as np
from skimage import io              # Only needed for web reading images

# Web read image; use cv2.imread(...) for local images
img = cv2.cvtColor(io.imread('/image/jnCvG.jpg'), cv2.COLOR_RGB2GRAY)

# Get rid of JPG artifacts
img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)[1]

# Create structuring elements
horizontal_size = 11
vertical_size = 11
horizontalStructure = cv2.getStructuringElement(cv2.MORPH_RECT, (horizontal_size, 1))
verticalStructure = cv2.getStructuringElement(cv2.MORPH_RECT, (1, vertical_size))

# Morphological opening
mask1 = cv2.morphologyEx(img, cv2.MORPH_OPEN, horizontalStructure)
mask2 = cv2.morphologyEx(img, cv2.MORPH_OPEN, verticalStructure)

# Outputs
cv2.imshow('img', img)
cv2.imshow('mask1', mask1)
cv2.imshow('mask2', mask2)
cv2.waitKey(0)
cv2.destroyAllWindows()

我得到以下两个口罩,对我来说看起来很不错:

Mask 1

Mask 2

希望有帮助!

----------------------------------------
System information
----------------------------------------
Platform:    Windows-10-10.0.16299-SP0
Python:      3.8.1
NumPy:       1.18.1
OpenCV:      4.2.0
----------------------------------------

关于python - 从图像中提取水平和垂直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60169540/

相关文章:

python - BST遍历分解复杂度

python - 使用 ForeignKey,NON NULL 约束失败

c++ - 使用 OpenCV 进行面部特征点检测

c - 扩张期间不需要的噪声元素

python - 尝试对 8x8 矩阵进行形态变换时出错

python - Tensorflow 膨胀的行为不同于形态膨胀

python - 逗号分隔字符串列的二进制编码

python - 如何在不使用内置 map 或星图的情况下编写类似星图的函数?

opencv - 如何将立体图像与 EmguCV 混合?

opencv - 使用 OpenCV 将图像投影到笔记本上