是否有任何工具可以使邊界在圖像中被很好地定義。 我正在使用Python-OpenCV。它是否有任何此功能的方法?如何使對象的邊界定義良好?
例如,
讓我的輸入圖像是這樣的。
你可以看到在邊界受到一些干擾。一些像素只是從邊界投影。邊界不是完美的直線。
所需的輸出是這樣的事情。
是否有任何工具可以使邊界在圖像中被很好地定義。 我正在使用Python-OpenCV。它是否有任何此功能的方法?如何使對象的邊界定義良好?
例如,
讓我的輸入圖像是這樣的。
你可以看到在邊界受到一些干擾。一些像素只是從邊界投影。邊界不是完美的直線。
所需的輸出是這樣的事情。
你可以做OCR,然後打印與所需的字體的結果。沒有其他方式將您的輸入圖像轉換爲理想的所需形狀。
這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/17217175) – meowgoesthedog
問題是:「是否有任何工具可以使界限在圖像中得到很好的定義。」答案是OCR工具,因爲要重建「完美」的對象輪廓,您需要關於可以滿足的對象的信息。如果我們使用字母,關於「完美」形狀的信息以字母形狀存儲。如果你做OCR,你可以打印完美的形狀。 –
您可以使用cv2.findContours()
檢測圖像中的輪廓,然後用線逼近輪廓。請參閱OpenCV contours tutorial上的輪廓逼近部分。在教程中注意,在盒子內部拍攝的部分可能有點鋸齒狀,但輪廓逼近只是畫出了很好的直線。你可以用同樣的方式來思考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()
應該如何算法猜你想達到什麼?你能否做出任何假設,如從任何黑色像素到最近的白色像素的距離可能不會大於x(字母線的寬度)?或者你有一套目標模板? – Micka