我正在尝试根据以下条件去除不需要的轮廓。
规则的目标是找到出现在图像绝对顶部和底部的轮廓。这是两张图片以供说明。
这些图像来自一个较大的图像。将它们分成两个单独的图像后,剩下的部分字符需要删除。它们落在“新”图像的顶部和底部。使用outlook = win32com.client.DispatchWithEvents("Outlook.Application", Handler_Class).GetNamespace("MAPI").Folders.Item("Shared")
函数显示我要删除的区域。我的问题是,我还得到了不遵循红色箭头指示的上述规则的区域。
这是我正在使用的代码。
cv2.rectangle
图片1
图片2
编辑:
搜索了更多内容并阅读了opencv文档后,我设法解决了这个问题。我使用contours, hierarchy = cv2.findContours(word, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
# top contours
if (0 <= x <= word.shape[1] and y == 0):
if (0 <= h <= 30):
word[y:y + h, x:x + w] = 0
# bottom contours
if (0 <= x <= word.shape[1] and y+h == word.shape[0]):
if (0 <= h <= 30):
word[y:y + h, x:x + w] = 0
制作了相同大小的新图像,然后使用np.zeros(word.shape[:2], dtype=word.dtype)
根据上面列出的标准绘制了轮廓。最后,我使用cv2.drawContours
答案 0 :(得分:0)
问题的根源是底部图像中的“ ryth”是所有已连接的组件,而“ y”接触底部边缘。也许首先使用形态学运算符来侵蚀文本-这可能会导致字母停止彼此渗入。