Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用openCV对模糊数字进行分类_Python_Opencv_Edge Detection_Number Recognition - Fatal编程技术网

Python 如何使用openCV对模糊数字进行分类

Python 如何使用openCV对模糊数字进行分类,python,opencv,edge-detection,number-recognition,Python,Opencv,Edge Detection,Number Recognition,我想从这张照片中捕捉数字 我从下面的链接尝试了多尺度匹配 我只想知道红色的号码。但问题是,openCV识别/匹配模板的红色数字模糊。是否有其他可能的方法来检测黑色背景上的红色数字?对数字进行分类 您在评论中澄清,您已经隔离了图像预检测的数字部分,因此我将从该假设开始 也许你可以通过把数字当作手写数字来近似数字的透视效果和“模糊性”。在这种情况下,有一个著名的用于分类训练的手写数字数据集称为mnist Yann LeCun在此列举了此数据集的最新技术 在光谱的远端,卷积神经网络产生(1%误差的

我想从这张照片中捕捉数字

我从下面的链接尝试了多尺度匹配


我只想知道红色的号码。但问题是,openCV识别/匹配模板的红色数字模糊。是否有其他可能的方法来检测黑色背景上的红色数字?

对数字进行分类

您在评论中澄清,您已经隔离了图像预检测的数字部分,因此我将从该假设开始

也许你可以通过把数字当作手写数字来近似数字的透视效果和“模糊性”。在这种情况下,有一个著名的用于分类训练的手写数字数据集称为mnist

Yann LeCun在此列举了此数据集的最新技术

在光谱的远端,卷积神经网络产生(1%误差的分数)。对于更简单的解决方案,使用倾斜、噪声消除、模糊和2像素移位的k近邻产生约1%的误差,并且实现速度明显更快。神经网络和支持向量机与deskewing也有一些相当令人印象深刻的表现率

请注意,卷积网络没有让您选择自己的特征,因此这里重要的颜色差异信息可能只是用于缩小感兴趣的区域。其他方法(定义特征空间)可能会更精确地结合已知的色差

Python在很棒的软件包sklearn-中支持许多机器学习技术。如果您正在寻找python中机器学习的教程化解释

从sklearn链接:

如果您使用这种方法学习,您将尝试对这些项目进行分类。为了强调开始训练这些基于机器学习的分类器是多么容易,下面是链接的sklearn软件包中示例代码的节略部分:

digits = datasets.load_digits() # built-in to sklearn!
data = digits.images.reshape((len(digits.images), -1))

# Create a classifier: a support vector classifier
classifier = svm.SVC(gamma=0.001)

# We learn the digits on the first half of the digits
classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2])
如果您与openCv结为一体(可能是因为您希望将来移植到实时系统),请使用opencv3/python!他们的演示使用k-最近邻(列在LeCun页面中),但他们也使用sklearn中的许多其他工具。他们使用支持向量机的ocr页面使用deskewing,这可能有助于解决问题的透视效果:


更新:我在您的图像上使用了上面概述的开箱即用的略读方法,经过了大量裁剪,并且正确地对其进行了分类。批次需要进行更多测试,以确定这在实践中是否可行

^^这个微小的图像是您在问题中嵌入的图像的8x8裁剪。mnist是8x8图像。这就是为什么它在不到一秒钟的时间内训练,并在skimage中使用默认参数

我将其转换为正确的格式,方法是使用

number = scipy.misc.imread("cropped_image.png")
datum  =  (number[:,:,0]*15).astype(int).reshape((64,))
classifier.predict(datum) # returns 8
我没有改变示例中的任何其他内容;这里,我只使用第一个通道进行分类,没有智能特征计算。15岁的她向我左右看了看;您需要对其进行调整,使其在目标范围内,或者(理想情况下)提供您自己的培训和测试集


目标检测

如果你没有在图像中分离出数字,你需要一个物体检测器。关于这个问题的文献空间是巨大的,我不会从兔子洞开始(可能是google Viola和Jones?)介绍python中“滑动窗口”检测器的基本原理。Adrian Rosebrock看起来甚至是SO上的一名撰稿人,该页面上有一些opencv和基于python的对象检测器的很好的示例,这些示例都经过了相当多的教程化(我没有意识到,您在问题中实际链接到了该博客)


简而言之,对图像中的窗口进行分类,并选择置信度最高的窗口。用感兴趣的区域缩小搜索空间当然会在性能的所有方面产生巨大的改进

您可以利用一些优势:

  • 数字位于黑色矩形挡板内,为一种颜色
  • 数字显示为分段LCD类型显示,如果是,则只有有限数量的分段处于关闭或打开状态
所以我建议你:

  • 校准相机并预处理图像以消除镜头失真
  • 校正显示矩形:
    • 使用hough的交点检测显示矩形 线,或先进行边缘检测,再进行轮廓检测,然后进行拾取 最大、最方正的轮廓
    • 使用
      GetPerspectiveTransform
      获取图像坐标与理想矩形之间的变换,然后变换输入图像 使用
      透视图
  • 将图像分割为R、G和B通道,计算出
    R-avg(G、B)
    ,这有点依赖于照明,但应该给出如下内容:

  • 然后,尝试对该图像进行模式匹配,或者重新分割图像并尝试找到亮起的显示段,或者运行OCR包

不幸的是,多重比例无法帮助您更清晰地解析图像。此外,您还需要识别多种字体,或者对您将识别的字体进行优先级排序(如上面的数字)。这里有一些最新的研究方法:1);2) . 深度卷积神经网络是这些方法的常用构造块。哦,感谢恩努奈特。由于我对opencv非常陌生,您能告诉我一些关于如何使用python提供的这些分类功能的教程吗?我最初的尝试是裁剪图像,以便只显示黑色背景和红色数字。然后运行分类器来识别数字?听起来合法吗?听起来是个不错的方法。如果你能裁剪图像,问题会变得有趣10000倍;在我的例子中,wher