相关疑难解决方法(0)

OpenCV-Python中的简单数字识别OCR

我正在尝试在OpenCV-Python(cv2)中实现"数字识别OCR".它仅用于学习目的.我想在OpenCV中学习KNearest和SVM功能.

我有每个数字的100个样本(即图像).我想和他们一起训练.

letter_recog.pyOpenCV示例附带了一个示例.但我仍然无法弄清楚如何使用它.我不明白什么是样本,响应等.另外,它首先加载一个txt文件,我首先不明白.

稍后搜索一下,我可以在cpp示例中找到一个letter_recognition.data.我使用它并在letter_recog.py模型中为cv2.KNearest创建了一个代码(仅用于测试):

import numpy as np
import cv2

fn = 'letter-recognition.data'
a = np.loadtxt(fn, np.float32, delimiter=',', converters={ 0 : lambda ch : ord(ch)-ord('A') })
samples, responses = a[:,1:], a[:,0]

model = cv2.KNearest()
retval = model.train(samples,responses)
retval, results, neigh_resp, dists = model.find_nearest(samples, k = 10)
print results.ravel()
Run Code Online (Sandbox Code Playgroud)

它给了我一个20000的数组,我不明白它是什么.

问题:

1)letter_recognition.data文件是什么?如何从我自己的数据集构建该文件?

2)什么results.reval()表示?

3)我们如何使用letter_recognition.data文件(KNearest或SVM)编写简单的数字识别工具?

python ocr opencv numpy computer-vision

370
推荐指数
3
解决办法
21万
查看次数

Python opencv排序轮廓

我正在关注这个问题:

如何从左到右,从上到下排序轮廓?

从左到右和从上到下排序轮廓.但是,我的轮廓是使用这个(OpenCV 3)找到的:

im2, contours, hierarchy = cv2.findContours(threshold,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
Run Code Online (Sandbox Code Playgroud)

它们的格式如下:

   array([[[ 1,  1]],

   [[ 1, 36]],

   [[63, 36]],

   [[64, 35]],

   [[88, 35]],

   [[89, 34]],

   [[94, 34]],

   [[94,  1]]], dtype=int32)]
Run Code Online (Sandbox Code Playgroud)

当我运行代码

max_width = max(contours, key=lambda r: r[0] + r[2])[0]
max_height = max(contours, key=lambda r: r[3])[3]
nearest = max_height * 1.4
contours.sort(key=lambda r: (int(nearest * round(float(r[1])/nearest)) * max_width + r[0]))
Run Code Online (Sandbox Code Playgroud)

我收到了错误

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)

所以我改成了这个:

max_width = …
Run Code Online (Sandbox Code Playgroud)

python lambda opencv python-2.7 opencv3.0

15
推荐指数
3
解决办法
1万
查看次数

python + opencv - 如何绘制hsv范围?

为了提取颜色,我们有这个功能

# define range of blue color in HSV
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])

# Threshold the HSV image to get only blue colors
mask = cv2.inRange(hsv, lower_blue, upper_blue)
Run Code Online (Sandbox Code Playgroud)

我们如何实际可视化我在hsv空间定义的范围(lower_blue,upper_blue)?另外我如何实际绘制hsv颜色,但它不起作用......?我有这个代码:

upper = np.array([60, 255, 255])
upper = cv2.cvtColor(upper, cv2.COLOR_HSV2BGR)


upper = totuple(upper/-255)
print(upper)
plt.imshow([[upper]])
Run Code Online (Sandbox Code Playgroud)

python opencv

2
推荐指数
1
解决办法
5368
查看次数

标签 统计

opencv ×3

python ×3

computer-vision ×1

lambda ×1

numpy ×1

ocr ×1

opencv3.0 ×1

python-2.7 ×1