标签为 [opencv] 的文章

OpenCV的鼠标操作——用鼠标画矩形(代码解读)

起因 知乎上被邀请回答一个问题,关于OpenCV的鼠标操作的问题。我发现回答下来写了不少东西,可以整理为一篇文章发出来,顺便说下不少人关心的如何用操作鼠标,比如如何用鼠标在图像上画一个矩形或者说选择一个矩形的ROI。 知乎上的问题问的是下面这段代码是什么意思。 正好,这段代码我是看过的,而且就在最近两周。所以正好可以说道一下。 介绍 这一段代码我最初是在contrib模块里面tracking模块的samples里面看到的,出自roiSelector.hpp。这个文件的作用就是用鼠标在图片中选择一个矩形区域。感兴趣的读者可以到这里知道源代 ......

C++从零实现深度神经网络之六——实战手写数字识别(sigmoid和tanh)

之前的五篇博客讲述的内容应该覆盖了如何编写神经网络的大部分内容,在经过之前的一系列努力之后,终于可以开始实战了。试试写出来的神经网络怎么样吧。 数据准备 有人说MNIST手写数字识别是机器学习领域的Hello World,所以我这一次也是从手写字体识别开始。我是从Kaggle找的手写数字识别的数据集。数据已经被保存为csv格式,相对比较方便读取。 数据集包含了数字0-9是个数字的灰度图。但是这个灰度图是展开过的。展开之前都是28x28的图像,展开后成为1x784的一行。csv文件中,每一行有785个元素,第一个元素是数字标签,后面的78 ......

C++从零实现深度神经网络之五——模型的保存和加载以及画出实时输出曲线

模型的保存和加载 在我们完成对神经网络的训练之后,一般要把模型保存起来。不然每次使用模型之前都需要先训练模型,对于data hungry的神经网络来说,视数据多寡和精度要求高低,训练一次的时间从几分钟到数百个小时不等,这是任何人都耗不起的。把训练好的模型保存下来,当需要使用它的时候,只需要加载就行了。 现在需要考虑的一个问题是,保存模型的时候,我们到底要保存哪些东西? 之前有提到,可以简单的认为权值矩阵就是所谓模型。所以权值矩阵一定要保存。除此之外呢?不能忘记的一点是,我们保存模型是为了加载后能使用模 ......

OpenCV玩九宫格数独(三):九宫格生成与数独求解

前言 在此之前,OpenCV玩九宫格数独(一)和(二)分别介绍了如何从九宫格图片中提取出已知数字和如何用knn训练数字识别模型。在这些前期工作都已经完成的基础上,接下来我们需要做什么呢? 我们要做的有三部分: 1.生成九宫格,也就是生成一个9x9的矩阵,把已知的数字按照图片中的位置填到矩阵中的相应位置,其他位置全部置0。 2.编写数独求解算法,对九宫格矩阵进行求解。 3.把填完的九宫格重新填充到图片中去。 我们仍然是一步一步来说。 生成九宫格 这里就需要用到我们之前两篇的内容了,生成九宫格的步骤如下: 1.从九宫格图 ......

OpenCV玩九宫格数独(二):knn数字识别

前言 首先需要说明,这里所说的数字识别不是手写数字识别! 但凡对机器学习有所了解的人,相信看到数字识别的第一反应就是MNIST。MNIST是可以进行数字识别,但是那是手写数字。我们现在要做的是要识别从九宫格图片中提取出来的印刷体的数字。手写数字集训练出来的模型用来识别印刷体数字,显然不太专业。而且手写体跟印刷体相差不小,我们最看重的正确率问题不能保证。 本文从零开始做一遍数字识别,展示了数字识别的完整流程。从收集数据开始,到数据预处理,再到训练KNN,最后进行数字识别。 我们一步一步来说。 数据收集 为了便 ......

OpenCV玩九宫格数独(一)——九宫格图片中提取数字

前言 首先要明确我们的任务。要想解数独,需要进行计算,图片格式的数字肯定是不行的,所以必须把图片上的数字转换为实实在在的数字才能进行计算。要得到实实在在的数字,我们需要做的是对图片上的数字进行提取和识别。本文先说第一步,图片中数字的提取。 在一年之前,我曾用C++尝试过opencv解数独,但由于当时水平有限,未能完成。当时的成果就是透视变换的应用和方格数字的提取。现在稍微简化一下工作,不再从倾斜的数独图片中提取数独,而是直接用正拍且已经提取好的数独开始处理。这里用到的数独图片如下图所示: 方法 1.以 ......

OpenCV玩九宫格数独(零)——预告篇

九宫格 数独源于18世纪的瑞士,又称九宫格,有九行、久列和九宫。玩家需要在九宫格中,根据已知的数字,利用逻辑和推理能力,填出所有的空格中应有的数字。填的时候要求每行、每列和每宫都要不重复地包含数字0-9。每行、每列和每宫中1-9都必须出现且只能出现一次,故称之为数独。数独游戏考察的是解题者的观察能力和逻辑推理能力,虽然规则很简单,但是数字的排列方式却是包含千变万化,是一种锻炼思维的绝佳方式。有时候数独不光有数字的变化,还有颜色的变化,更难但趣味也更多。 在刚刚接触机器视觉的时候,我就想着用机器视觉 ......

用OpenCV和Dlib进行人脸颜值预测

本项目部分基于这个博客Computer Vision for Predicting Facial Attractiveness。按照上面这个博客复现起来比较麻烦(当然是对我而言),而且我想要做的是对于任意一张人脸进行检测之后都可以进行颜值估计,但是他给出的代码还需要进行改动不少才行。现在就把自己的复现过程记录下来。 本文中只展示了部分关键代码。完整代码和测试用的数据可以在GitHub上获取。 不同点 在提取人脸关键点的时候,原文中提到用的是CLM framework,本文用的是之前配置好的Dlib。 实现了对自选图片中人脸的颜值估计 用到的Python库 numpy opencv dl ......

OpenCV检测篇(二)——笑脸检测

前言 由于本文与上一篇OpenCV检测篇(一)——猫脸检测具有知识上的连贯性,所以建议没读过前一篇的先去阅读一下前一篇,前面讲过的内容这里会省略掉。 笑脸检测 其实也没什么可省略的,因为跟在opencv中,无论是人脸检测、人眼检测、猫脸检测、行人检测等等,套路都是一样的。正所谓: ####自古深情留不住,总是套路得人心。 发挥主要作用的函数有且仅有一个:detectMultiScale()。前一篇猫脸检测中已经提到过这个函数,这里就不再详细赘述。 这里只说一下笑脸检测的流程,显然也都是套路: 1.加载人脸检测器进行人脸检测 2 加载笑 ......

OpenCV检测篇(一)——猫脸检测

OpenCV OpenCV是时下最流行的基于C++的开源计算机视觉库,它功能丰富,函数众多,从最基本的读写图片,到简单的图像处理(比如降噪滤波、边缘检测、图像变换、特征提取等),再到更加高级的行人检测、人脸识别、文本识别等,尽皆包含。在OpenCV提供的函数的基础上,我们可以很方便地开发自己的应用,实现自己的算法。总的来说,就是OpenCV非常强大。具体有多强大?那得用了才知道。 很多要做人脸识别,要用到SIFT特征的人都问过的一个问题是,为什么配置好opencv之后,却找不到人脸识别的头文件,找不到SIFT在哪?这是因为OpenCV3. ......