14.基于opencv实现文字识别

from typing import Tuple
import cv2
import numpy as np

def grayScale(img : np.ndarray) -> np.ndarray:
       return cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

def blur(img : np.ndarray, k: int = 3, std : int = 0) -> np.ndarray:
       return cv2.GaussianBlur(img, (k,k), std)

def binary(img : np.ndarray) -> np.ndarray:
       return cv2.Canny(img, 100, 255)

def retBiggestContour(img : np.ndarray) -> Tuple[np.ndarray, Tuple[int, int]]:
    contours, _ = cv2.findContours(img, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
    cnt = sorted(contours, key = cv2.contourArea)[-1]
    _, (w,h), angle = cv2.minAreaRect(cnt)
    w,h = int(w), int(h)
    if angle > 45 or angle < -45:
        w,h = h,w
    return cnt, (w,h)

def extract(img : np.ndarray, 
            cnt : np.ndarray, 
            w : int, 
            h : int
            ) -> np.ndarray:
    cnt = cnt.reshape(cnt.shape[0], cnt.shape[-1])
    # the corners have extreme x, y coordinates
    s1 = sorted(cnt, key = lambda x : (x[0], x[1]))
    s2 = sorted(cnt, key = lambda x : (x[1], x[0]))
    corner1, corner3 = s1[0], s1[-1]
    corner2, corner4 = s2[0], s2[-1]

    corners = np.array([corner1, corner2, corner3, corner4])
    target_corners = np.array([(0,0), (w,0), (w,h), (0,h)])

    H, _ = cv2.findHomography(corners, target_corners, params = None)

    transformed_image = cv2.warpPerspective(
    img, H, (img.shape[1], img.shape[0]))

    transformed_image = transformed_image[:h, :w]

    return transformed_image

def transform(img : np.ndarray) -> np.ndarray:
    T = cv2.GaussianBlur(img, (11,11),0)-10
    return (img > T).astype(np.uint8) * 255

if __name__ == "__main__":
    img = cv2.imread("G:/py/i/wenzi.jpg")
    gray = grayScale(img)
    blurred = blur(gray)
    edged = binary(blurred)
    cnt, (w,h) = retBiggestContour(edged)
    img = extract(gray, cnt, w, h)
    img = transform(img)
    cv2.namedWindow('img',cv2.WINDOW_NORMAL)
    cv2.imshow('img',img)
    k = cv2.waitKey(0)&0xFF
    if k == 27:
        cv2.destroyAllWindows()
    elif k == ord('q'): 
        cv2.destroyAllWindows()
    #cv2.imwrite("G:/transformed.jpg", img)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小钱要努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值