我有一个既有大写字母又有小写字母的文档,并且正在对其应用自适应阈值处理。
cvtColor(mbgra, dst, CV_BGR2GRAY);
GaussianBlur(dst, dst, Size(11, 11), 0);
adaptiveThreshold(dst, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 11, 3);
算法效果很好,但是对于大的黑色字母,我有一个小问题,因为它像这样从内部变成空心的
原始图像的字母以黑色填充
问题是如何使那些字母像原始图像一样用黑色填充,而又不增加过滤器的块大小,因为这对于小字母来说效果不好!
当然欢迎任何想法或建议!
答案 0 :(得分:0)
以下代码:
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()
也许可以尝试从此处开始,选择原始图像中黑色像素很多的区域...