python - 我无法使用 OpenCV 和 Python 拆分所有手写字母

标签 python opencv image-processing

我编写了下面的代码来拆分手写字母,在某些情况下,无法正确拆分:

import cv2 
import numpy as np
import imutils
from google.colab.patches import cv2_imshow

image = cv2.imread("/content/IMG_3789.JPG")
image = imutils.resize(image, height = 500)

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.medianBlur(gray, 5)
thresh = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
cv2.THRESH_BINARY_INV,11,8)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
dilate = cv2.dilate(thresh, kernel, iterations=10)

cnts = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

for c in cnts:
    area = cv2.contourArea(c)
    if area > 500:
        x,y,w,h = cv2.boundingRect(c)
        ROI = image[y:y+h, x:x+w]
        cv2_imshow(ROI)
        break

img_gray = cv2.cvtColor(ROI, cv2.COLOR_BGR2GRAY)
img_gauss = cv2.GaussianBlur(img_gray, (3,3), 0)
kernel = np.ones((4,4), np.uint8) 
erode = cv2.erode(img_gauss, kernel, iterations=1)
th3 = cv2.adaptiveThreshold(erode,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV,51,10)
im_th2, ctrs, hier = cv2.findContours(th3.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rects = [cv2.boundingRect(ctr) for ctr in ctrs]
rects.sort()

x, y, w, h = rects[0]
cv2.rectangle(ROI, (x, y), (x+w, y+h), (0, 255, 0), 3)
cv2_imshow(ROI)

第一个字符有两个字母:

Array 0

第五个也是:

fifth

是否可以正确识别?

最佳答案

前两个字母似乎属于未连接的 blob(除非您的预处理使它们接触)。所以 split 应该不是问题。

对于最后两个字母,仅使用“哑”预处理函数没有真正的解决方案。宽度不是一个可靠的标准,即使您检测到两个字符,您也不知道确切的分割位置。

您必须设计标准来判断 blob 的哪些部分类似于字符(这非常困难),或者执行部分识别,可能有多个假设并保持最有可能。

手写分割极具挑战性。

关于python - 我无法使用 OpenCV 和 Python 拆分所有手写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58191269/

相关文章:

python - 合并数据框保留所有项目 Pandas

python - BeautifulSoup 无法使用 find_all() 提取项目

我们可以使用 C 代码用 gcc 编译 OpenCv-3.3.0 和 GTK+3 吗?

python - 如何使用 OpenCV 和 Python 将视频与引用视频进行比较?

java - 将颜色设置为 int 值以用于 setRGB(int x, int y, int rgb) 方法? -- java

python - 如何并行运行 Tensorboard

python - 使用 python 渲染并保存视频文件

python - 如何在 python 中打开和保存视频文件?

python - "TypeError: Using a ` tf.Tensor ` as a Python ` bool ` is not allowed."在数据集上调用map函数时

python - 如何屏蔽图像中除内部特定颜色之外的所有内容