首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大黑字的自适应阈值处理

大黑字的自适应阈值处理
EN

Stack Overflow用户
提问于 2019-01-18 23:25:21
回答 1查看 296关注 0票数 0

我有一个文档,它既有非常大的字母,也有非常小的字母,我正在对它应用自适应阈值。

代码语言:javascript
复制
cvtColor(mbgra, dst, CV_BGR2GRAY);
GaussianBlur(dst, dst, Size(11, 11), 0);
adaptiveThreshold(dst, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 11, 3);

这个算法运行得很好,但是我有一个关于大黑字的小问题,因为它从内部变成了中空,就像这样

原始图像中的这些字母用黑色填充

问题是如何在不增加滤镜块大小的情况下让这些字母像在原始图像中那样用黑色填充,因为这不能很好地处理小字母!

当然,欢迎您的任何想法或建议!

EN

回答 1

Stack Overflow用户

发布于 2019-01-19 00:40:27

以下代码:

代码语言:javascript
复制
import numpy as np
import cv2
import matplotlib.pyplot as plt

image = cv2.imread("FYROJ.png")
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 3)

im_contours, contours, hier = cv2.findContours(thresh, mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_NONE)
hier = hier[0]
kept_contours = [contour for idx, contour in enumerate(contours) if hier[idx][2] >= 0]

drawing = np.zeros_like(gray)
cv2.drawContours(drawing, kept_contours, -1, color=255)

ret, markers = cv2.connectedComponents(drawing)

watershed_res = cv2.watershed(image, np.int32(markers))

plt.imshow(watershed_res)
plt.show()

将生成此图像:

也许可以从这里开始,选择原始图像中有大量黑色像素的区域……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54256925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档