我有这样的角色形象:
获得contours
和convexHull
后输出如下:
为此,我使用了以下代码:
import cv2
img = cv2.imread('input.png', -1)
ret, threshed_img = cv2.threshold(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY),
127, 255, cv2.THRESH_BINARY)
image, contours, hier = cv2.findContours(threshed_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
for cnt in contours:
# get convex hull
hull = cv2.convexHull(cnt)
cv2.drawContours(img, [hull], -1, (0, 0, 255), 1)
cv2.imwrite("output.png", img)
正如您在跟随图像中看到的那样,识别出与原始角色垂直对齐的轮廓。但那些与原始核心角色分开。 (这些实际上是称为sinhala的语言的修饰语 - සිංහල)
现在我想将那些垂直对齐的轮廓与核心角色合并。最终输出应如下。我怎么能有效地做到这一点?
答案 0 :(得分:3)
您可以尝试使用具有垂直矩形形状的内核执行形态学操作。这样,原始字符上方的ceratin字符将作为一个字符连接起来。
rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 30))
threshed = cv2.morphologyEx(th2, cv2.MORPH_CLOSE, rect_kernel)
cv2.imshow('threshed', threshed)
imgContours, Contours, Hierarchy = cv2.findContours(threshed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
for cnt in Contours:
hull = cv2.convexHull(cnt)
cv2.drawContours(img2, [hull], -1, (0, 0, 255), 1)
cv2.imshow('convex hull', img2)
答案 1 :(得分:1)
您可以尝试根据轮廓中心之间的距离合并轮廓。由于您希望更加强调垂直连接,因此可以修改距离函数,使其更加重视垂直连接。这可以通过将水平距离视为阈值更“昂贵”来完成。例如,要强调垂直接近度而不是水平接近度,您可以使用大于1的常数来缩放水平差异:
distance = hypotenuse(distance_x * 5, distance_y)