gpt4 book ai didi

python-3.x - 如何在不丢失opencv信息的情况下分割手写和打印数字?

转载 作者:太空宇宙 更新时间:2023-11-03 21:01:36 27 4
gpt4 key购买 nike

我已经编写了一个算法来检测打印和手写数字并将其分段,但是在使用 ski-image 包中的 clear_border 删除外部矩形手写数字时会丢失。任何阻止信息的建议。

样本:
enter image description here

如何分别获取所有 5 个字符?

最佳答案

从图像中分割字符-

方法-

  1. 阈值图像(将其转换为 BW)
  2. 执行扩张
  3. 检查轮廓是否足够大
  4. 找到矩形轮廓
  5. 获取 ROI 并保存角色

Python 代码 -

# import the necessary packages
import numpy as np
import cv2
import imutils

# load the image, convert it to grayscale, and blur it to remove noise
image = cv2.imread("sample1.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 0)

# threshold the image
ret,thresh1 = cv2.threshold(gray ,127,255,cv2.THRESH_BINARY_INV)

# dilate the white portions
dilate = cv2.dilate(thresh1, None, iterations=2)

# find contours in the image
cnts = cv2.findContours(dilate.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]

orig = image.copy()
i = 0

for cnt in cnts:
# Check the area of contour, if it is very small ignore it
if(cv2.contourArea(cnt) < 100):
continue

# Filtered countours are detected
x,y,w,h = cv2.boundingRect(cnt)

# Taking ROI of the cotour
roi = image[y:y+h, x:x+w]

# Mark them on the image if you want
cv2.rectangle(orig,(x,y),(x+w,y+h),(0,255,0),2)

# Save your contours or characters
cv2.imwrite("roi" + str(i) + ".png", roi)

i = i + 1

cv2.imshow("Image", orig)
cv2.waitKey(0)

首先,我对图像进行了阈值处理,将其转换为黑白。我得到图像白色部分的字符和黑色背景。然后我放大图像使字符(白色部分)变粗,这样可以很容易地找到合适的轮廓。然后 find findContours 方法用于查找轮廓。然后我们需要检查轮廓是否足够大,如果轮廓不够大则忽略它(因为那个轮廓是噪音)。然后使用 boundingRect 方法找到轮廓的矩形。最后,保存并绘制检测到的轮廓。

输入图像-

Input

阈值 -

Thresh

膨胀-

Dilate

轮廓 -

Contours

保存的字符 -

char2 char0 char1 char3

关于python-3.x - 如何在不丢失opencv信息的情况下分割手写和打印数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52995607/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com