- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从图像中提取手写数字和字母表,为此我点击了这个 stackoverflow 链接。对于大多数使用标记书写字母的图像,它工作正常,但是当我使用使用 Pen 写入数据的图像时,它会失败得很惨。需要一些帮助来解决这个问题。
下面是我的代码:
import cv2
import imutils
from imutils import contours
# Load image, grayscale, Otsu's threshold
image = cv2.imread('xxx/pic_crop_7.png')
image = imutils.resize(image, width=350)
img=image.copy()
# Remove border
kernel_vertical = cv2.getStructuringElement(cv2.MORPH_RECT, (1,50))
temp1 = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel_vertical)
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (50,1))
temp2 = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, horizontal_kernel)
temp3 = cv2.add(temp1, temp2)
result = cv2.add(temp3, image)
# Convert to grayscale and Otsu's threshold
gray = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray,(5,5),0)
_,thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)
# thresh=cv2.dilate(thresh,None,iterations=1)
# Find contours and filter using contour area
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[0]
MIN_AREA=45
digit_contours = []
for c in cnts:
if cv2.contourArea(c)>MIN_AREA:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(img, (x, y), (x + w, y + h), (36,255,12), 2)
digit_contours.append(c)
# cv2.imwrite("C:/Samples/Dataset/ocr/segmented" + str(i) + ".png", image[y:y+h,x:x+w])
sorted_digit_contours = contours.sort_contours(digit_contours, method='left-to-right')[0]
contour_number = 0
for c in sorted_digit_contours:
x,y,w,h = cv2.boundingRect(c)
ROI = image[y:y+h, x:x+w]
cv2.imwrite('xxx/segment_{}.png'.format(contour_number), ROI)
contour_number += 1
cv2.imshow('thresh', thresh)
cv2.imshow('img', img)
cv2.waitKey()
使用marker书写时能够正确提取数字。
下面是一个例子:
原始图片
正确提取字符
无法读取的图像。
原始图片
提取不正确
最佳答案
在这种情况下,您只需调整您的参数即可。因为你的手写字背景没有竖线,所以我决定删掉。
# Remove border
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (50,1))
temp2 = 255 - cv2.morphologyEx(image, cv2.MORPH_CLOSE, horizontal_kernel)
result = cv2.add(temp2, image)
而且有效。
关于python - 无法分割手写字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66312009/
目录 1、背景 2、样本均值和样本方差矩阵 3、PCA 3.1 最大投影方差 3.2 最小重构距离 4、Py
android中获取屏幕的长于宽,参考了网上有很多代码,但结果与实际不符,如我的手机是i9000,屏幕大小是480*800px,得到的结果却为320*533 结果很不靠谱,于是自己写了几行代码,亲测
我写了一个 vector 类来学习 move 语义。 我使用 move 构造函数来 move T(注释行)。 我的问题是为什么不像在 C 中一样复制临时对象的所有字节并将临时对象的所有字节设置为零?
我需要解析一种类似于 Java 的最小化版本的语言。由于效率是最重要的因素,所以我选择手写解析器而不是像 GOLD、bison 和 yacc 这样的 LRAR 解析器生成器。 但是我找不到优秀的手写解
我正在尝试向 perlin 单纯形噪声函数添加 asm.js 注释: "use strict"; // Ported from Stefan Gustavson's java implementati
之前在bind和apply以及call函数使用中详解总结过bind和apply以及call函数的使用,下面手写一下三个函数。 一、首先call函数 Function.prototype.MyCall
我正在 asm.js 中编写优先级队列和八叉树Javascript 的子集,以便从它们中挤出最后可能的性能。 但是,您如何在 asm.js 函数的 heap 中存储对 Javascript 对象的引用
我是一名优秀的程序员,十分优秀!