是否有任何工具可以在图像中很好地定义边界。我正在使用 Python-OpenCV。它有这个功能的任何方法吗?
例如。
让我的输入图像是这样的。
您可以在边界上看到一些干扰。一些像素只是从边界投影。边界不是完美的直线。
所需的输出是这样的。
是否有任何工具可以在图像中很好地定义边界。我正在使用 Python-OpenCV。它有这个功能的任何方法吗?
例如。
让我的输入图像是这样的。
您可以在边界上看到一些干扰。一些像素只是从边界投影。边界不是完美的直线。
所需的输出是这样的。
您可以用线条检测图像中cv2.findContours()
的轮廓,然后用线条近似轮廓。请参阅OpenCV 轮廓教程中的轮廓近似部分。请注意,在教程中,在盒子内拍摄的部分可能有点锯齿状,但轮廓近似只是给出了很好的直线来绘制。你可以用同样的方式来想象 K,整体轮廓就像一个盒子,但里面有一些碎片。
这似乎运作良好:
import cv2
import numpy as np
img = cv2.imread('k.png', 0) # read as grayscale
img = 255 - img # flip black and white
# find contours in the image
bin_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1]
mode = cv2.RETR_EXTERNAL
method = cv2.CHAIN_APPROX_SIMPLE
contours = cv2.findContours(bin_img, mode, method)[1]
# take largest contour, approximate it
contour = contours[0]
epsilon = 0.005 * cv2.arcLength(contour, True)
approx_contour = cv2.approxPolyDP(contour, epsilon, True)
contour_img = np.zeros_like(img)
contour_img = cv2.fillPoly(contour_img, [approx_contour], 255)
contour_img = 255 - contour_img # flip back black and white
cv2.imshow('Fixed k', contour_img)
cv2.waitKey()
您可以进行 OCR,然后使用所需的字体打印结果。没有其他方法可以将您的输入图像转换为完美的所需形状。