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

2024-04-16 11:58:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想提取水平和垂直线在两个面具为附加的图像

我尝试过形态学手术来做这个

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

但问题是,它将线检测为矩形,然后将其绘制为表示矩形两侧的两条线的形式

有什么办法解决这个问题吗

图像:
img

横向结果:

h

纵向结果:

v


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

img


Tags: rect图像size水平cv手术矩形形态学
1条回答
网友
1楼 · 发布于 2024-04-16 11:58:56

你对你的结构元素做了什么?你剩下的代码在哪里

我建议使用^{}使用形态学打开,如下所示:

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('https://i.stack.imgur.com/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
                    

相关问题 更多 >