簡體   English   中英

無法在 Python 中使用 OpenCV 對圖像進行校正

[英]Unable to Deskew an image using OpenCV in Python

我按照Adrian Rosebrock 對圖像進行糾偏的教程進行了操作,並創建了一個函數,如:

def deskew(image):
    
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    gray = cv2.bitwise_not(gray) # invert colors white numbers black background

    thresh = cv2.threshold(gray, 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]

    coords = np.column_stack(np.where(thresh > 0))
    angle = cv2.minAreaRect(coords)[-1]
   
    if angle < -45:
        angle = -(90 + angle)
    
    else:
        angle = -angle


    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h),
        flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)


    cv2.putText(rotated, "Angle: {:.2f} degrees".format(angle),
        (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

    return image,"{:.3f}".format(angle)

    
image = cv2.imread(img_path)
skewed = imutils.rotate(image,14.74)
corrected,angle = deskew(skewed)

plt.imshow(corrected)
plt.title(f"Corrected by:{angle}")
plt.show()

並得到角度= 0.0

圖片是這樣的:

在此處輸入圖片說明

實際上,原始圖像已經傾斜。 我的所有圖片都是這樣的(邊框和文本中很少或沒有間距:從教科書中裁剪的問題圖片)。 我想對此執行 OCR。 我怎樣才能消除圖片的歪斜?

這是我糾正圖像中二維歪斜的方法。 它簡單而天真,但適用於幾乎所有包含大量文本的圖像。 它不會糾正 3d 失真。 它僅適用於僅包含 2d 傾斜的圖像。 並且可能不適用於包含圖形的圖像(如您的化學分子結構),但請嘗試一下,因為您的圖像與我的非常相似。

這個腳本中正確的傾斜函數是我的方法。

如果您仍然不滿意,我有一個更好的主意。

糾偏庫最適合校正圖像中的 2d 偏斜。

希望這能解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM