图像处理笔试面试题

秋招各种笔试面试,总结下遇到的图像处理和C++的题目。写下来的都是能记起来的,记不起来的应该也有不少。大概让没有经历过的人知道会遇到什么样的问题,可以提前准备下。除了一下题目之外,最多的还是围绕着你做过的项目来问的。 一、图像处理题目 注意,一下所有需要写代码的题目,不允许使用OpenCV的Mat类。如果图片内容需要用指针读取。 给定0-1矩阵,求连通域。(遇到过N次,笔试面试都有,最好做到能徒手hack代码或者伪代码。) 写一个函数,求灰度图的直方图。 写一个均值滤波(中值滤波)。 写出高斯算子,Sobel算子,拉 ......

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

百度AI开发者大会见闻

7月5日在国家会议中心举办的百度AI开发者大会结束好,貌似吃瓜群众关注的重点是李彦宏乘坐无人驾驶汽车被交警介入调查。一般违反交通规则的处罚,包括罚款扣分吊销驾驶证啥的,针对的都是开车司机。那么问题来了,对于没有司机的无人驾驶汽车,到底要扣谁的分?难道是坐在副驾驶上的“乘客”李彦宏的吗? 但是不管这些吸引眼球的新闻,作为一个通过CSDN拿到票的小白来说,听了陆奇了讲了一个上午,除了总体思路是让人觉得百度特别牛逼之外,主要的就是发布两个Android:“AI时代的Android”——DuerOS,和“汽车工业的Android” ——Apollo。 ......

个人博客开通!——Django从入门到…WordPress

个人博客网站开通了,欢迎大家来逛:6xiaolong.cn 网站搭建的过程简直是曲折。很多人都想有个自己的个人网站,平时发发博客啥的,想想就觉得高大上。。在搭建网站的诸多方法中,我一开始选择了最难的一种——自己写一个。然而... 原因是这样的。当学习了Python之后,发现Python是可以写网站的。于是在本学期开学的时候心血来潮,就想要自己写一个博客网站。在什么都不懂的情况下粗略地了解了Django和Flask之后,什么都不懂地就选择了Django。 然后就什么都不懂的开始了。依赖百度和谷歌也确实做出了一个博客的雏形。看起来像下面这 ......

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

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

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

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

C++从零实现深度神经网络之四——神经网络的预测和输入输出的解析

在上一篇的结尾提到了神经网络的预测函数predict(),说道predict调用了forward函数并进行了输出的解析,输出我们看起来比较方便的值。 神经网络的预测函数predict() predict()函数和predict_one()函数的区别相信很容易从名字看出来,那就是输入一个样本得到一个输出和输出一组样本得到一组输出的区别,显然predict()应该是循环调用predict_one()实现的。所以我们先看一下predict_one()的代码: C++ int Net::predict_one(cv::Mat &input) { if (input.empty()) { ......

C++从零实现深度神经网络之三——神经网络的训练和测试

前言 在之前的博客中我们已经实现了Net类的设计和前向传播和反向传播的过程。可以说神经网络的核心的部分已经完成。接下来就是应用层面了。要想利用神经网络解决实际的问题,比如说进行手写数字的识别,需要用神经网络对样本进行迭代训练,训练完成之后,训练得到的模型是好是坏,我们需要对之进行测试。这正是我们现在需要实现的部分的内容。 完善后的Net类 需要知道的是现在的Net类已经相对完善了,为了实现接下来的功能,不论是成员变量还是成员函数都变得更加的丰富。现在的Net类看起来是下面的样子: C++ ......

C++从零实现深度神经网络之二——前向传播和反向传播

前言 前一篇博客Net类的设计和神经网络的初始化中,大部分还是比较简单的。因为最重要事情就是生成各种矩阵并初始化。神经网络中的重点和核心就是本文的内容——前向和反向传播两大计算过程。每层的前向传播分别包含加权求和(卷积?)的线性运算和激活函数的非线性运算。反向传播主要是用BP算法更新权值。本文也分为两部分介绍。 前向过程 如前所述,前向过程分为线性运算和非线性运算两部分。相对来说比较简单。 线型运算可以用Y = WX+b来表示,其中X是输入样本,这里即是第N层的单列矩阵,W是权值矩阵,Y是加权求和之后的结果矩阵 ......