繁体   English   中英

如何使用opencv检测不规则形状并从图像中删除?

[英]How I can detect irregular shapes and remove from image with opencv?

我在 Python 中使用 opencv 库,我遇到了这个问题。 我有这张图片,我之前去除了很多噪点,但是在这张图片中有很多不规则的形状我想去除。

例如 :

我使用这张图片:

开始图像

为了获取起始图像,我使用以下代码:

import cv2
image = cv2.imread("Image.png")
## Heading ##
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
inverted_thresh = 255 - thresh
dilate = cv2.dilate(inverted_thresh, kernel, iterations=3)

cnts = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
    x, y, w, h = cv2.boundingRect(c)
    ROI = thresh[y:y + h, x:x + w]
    data = pytesseract.image_to_string(ROI, lang='eng', config='--psm 6').lower()

sub = cv2.subtract(~gray, dilate)


# In[4]:


# Sobel Edge Detection
sobelx = cv2.Sobel(src=sub, ddepth=cv2.CV_64F, dx=1, dy=0, ksize=5)  # Sobel Edge Detection on the X axis
sobely = cv2.Sobel(src=sub, ddepth=cv2.CV_64F, dx=0, dy=1, ksize=5)  # Sobel Edge Detection on the Y axis
sobelxy = cv2.Sobel(src=sub, ddepth=cv2.CV_64F, dx=1, dy=1, ksize=5)  # Combined X and Y Sobel Edge Detection

# In[8]:


# Canny Edge Detection
edges = cv2.Canny(image=sub, threshold1=45, threshold2=55)  # Display Canny Edge Detection Image
cv2.imshow('Canny Edge Detection', edges)

我会得到这个结果

期望的结果

我怎样才能得到这个结果?

如果您知道边界的最小线长,则可以轻松过滤其他元素。

import cv2
gray = cv2.imread("Image.png", cv2.IMREAD_GRAYSCALE)

minLineWidth = 397

hKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (minLineWidth, 1))
vKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, minLineWidth))

hGray = cv2.morphologyEx(gray, cv2.MORPH_OPEN, hKernel)
vGray = cv2.morphologyEx(gray, cv2.MORPH_OPEN, vKernel)

gray = cv2.bitwise_or(hGray, vGray)

cv2.imshow("gray", gray)
cv2.waitKey()

结果图片: 结果图片

如果您不知道最小线长,可以使用概率霍夫变换来查找所有线。 然后您可以按角度过滤线条并找到最小重复线条长度。 在您可以应用建议的代码或仅绘制过滤线之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM