分类: [OpenCV]

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

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

OpenCV3.3出炉,DNN为最大亮点

OpenCV3.3在8月3号正式出炉,想要体验最新特性的朋友可以去官网下载了,反正配置一下只需要几分钟。这次最主要的更新就是,终于把DNN模块从contrib里面提到主仓库里面,放到了官方发布版中。虽然我配置的一直是OpenCV with contrib,但是对于DNN模块,限于电脑配置太低,一直没有怎么尝试。这次可以借着新版发布抽空尝试一下了。 按照官方介绍,DNN现在有下面几点特性: 无需任何依赖 新加入的DNN模块不需要任何依赖,除了protobuf......而protobuf被加入到OpenCV的thirdparty了。简直是贴心至极有没有? 支持以下框架 Caffe 1 Te ......

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. ......

OpenCV人脸检测(C++/Python)

之前一直觉得人脸检测是非常麻烦的,即使是用OpenCV麻烦到我都不敢去碰。这两天仔细看了下,如果只是调用opencv自带的分类器和函数的话,简直是简单。这不,正好最近也在学习Python索性就用C++和Python两种语言都实现一下。当然,我现在这个是最简单的版本。 步骤 调用opencv训练好的分类器和自带的检测函数检测人脸人眼等的步骤简单直接: 1. 加载分类器,当然分类器事先要放在工程目录中去。分类器本来的位置是在*\opencv\sources\data\haarcascades(harr分类器,也有其他的可以用,也可以自己训练) 2. 调用detectMultiScale( ......