- 博客(28)
- 资源 (7)
- 收藏
- 关注

原创 车牌识别实践(python+OpenCV+CNN)
Table of Contents个人感悟模块分解图像预处理车牌定位车牌过滤字符分割字符识别操作步骤总结个人感悟 一直以来对图像识别很感兴趣,再加上这段时间系统地自学了下机器学习的相关知识,所以想自己找实践项目做一下。至于为什么选择车牌识别,一方面是以前学习Opencv的时候也尝试做过,可能受限于当时的知识面,效果惨不忍睹;另一方面车牌...
2018-12-04 00:16:09
100383
538
原创 图像处理之地图轮廓美化
在利用传感器获取房间地图信息后由于多次测量存在误差,导致房间地图轮廓歪歪曲曲影响观感,我这里采用水平方向和垂直方向分别执行邻近线段合并的方法对这一问题做了一些处理。以下图为例,黑色表示地图轮廓,比如在垂直方向执行邻近线段合并时先获取图像3列数据作为一个计算单元,如下图的计算单元a、b、c,再将这些计算单元里邻近的线段合并成一条直线,至于计算单元c,由于其近似于曲线不进行合并,避免矫枉过正。
2021-02-23 16:13:09
1391
3
原创 MobileNet-YOLO 编译报错: opencv2/videoio.hpp: No such file or directory
从报错信息来看是opencv的问题。我在Makefile.config设置开启opencv,设置为3.x版本(MobileNet-YOLO需要opencv版本至少为3.3.1)USE_OPENCV := 1OPENCV_VERSION := 3由于我服务器上还有2.x版本的opencv,在cmake的时候检测到的是2.x版本导致报错。解决方法:指定opencv为3.x版本。执行命令 gedit ~/.bashrc在文件中新增第三行export PKG_CONFIG_
2021-01-08 17:58:23
1226
1
原创 jsoncpp在Ubuntu和Windows下的编译与使用
jsoncpp是json的一个C++库,编译过程比较傻瓜:git clone https://github.com/open-source-parsers/jsoncpp.gitcd jsoncpp-mastermkdir buildcmake ..make在终端执行如上命令后在 jsoncpp-master/build/lib目录下生成了libjsoncpp_static.a在Qt工程的pro文件加入jsoncpp库的代码路径和库路径INCLUDEPATH += /home/g
2020-12-01 16:42:04
637
1
原创 图像处理之获取闭合轮廓内的所有坐标点
现在需要用到这个功能,然而opencv没有函数可以直接拿来用,看到一位网友说可以用邻域连通的算法尝试解决。大意是先建一个背景灰度值为0的图片,再把轮廓点集的灰度值设置成a,从轮廓外找一种子点P,以4邻域的方式扩充直到遇到轮廓点。按照这个思路我写了个demo程序。#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <queue>int main
2020-10-14 17:49:25
5741
2
原创 一个简单的C++线程池demo
demo代码包含两个类,一个是ThreadPool类,对线程池做了封装,另一个FunGroup类,用于线程池的串行处理。线程池类可以用并行或串行的方式执行可调用对象。当并行执行可调用对象时,只需要调用AddFun函数将调用对象直接传入fun_queue_队列中,另外唤醒睡眠中的子线程处理该可调用对象。当串行执行可调用对象时,需要在AddFun函数指定可调用对象所属的队列组,该队列组保存在fun_groups_中,队列组中的可调用对象依赖于上一个可调用对象执行完成才能被执行。ThreadPool.h
2020-09-29 17:26:34
570
原创 std::vector之push_back&emplace_back
一直都说尽量用C++11的emplace_back替换push_back,前者的效率究竟比后者快多少不甚了解,写个demo简单测试下看看,下面这个demo程序我写了个Pt类用于测试,除了普通构造函数外还有拷贝构造和移动构造,3个静态变量分别对3种构造方法的调用次数进行统计。下面直接用push_back看看3个构造函数的调用情况,编译结果如下:construct_cnt_:100,copy_construct_cnt_:127,move_construct_cnt_:100个人理解:下面的代码调用
2020-08-19 16:32:58
1961
原创 muduo网络库之Acceptor、TcpServer
本篇博客针对Acceptor类和TcpServer类做下小结。博客代码来自于陈硕的muduo网络库,github地址https://github.com/chenshuo/muduo学习笔记:Acceptor类专注于做一件事情,就是在服务端接收所有的客户端请求,将连接成功的客户端交给TcpServer进一步处理。当服务端处于“1+N”多线程模式时,Acceptor的所有IO事件在“1”代表的线程中执行,连接进来的多个客户端在“N”代表的线程池中执行IO事件。TcpServer类作为用户可见类
2020-08-10 09:33:07
311
原创 muduo网络库之EventLoopThread、EventLoopThreadPool
本篇博客针对EventLoopThread类和EventLoopThreadPool类做下小结。博客代码来自于陈硕的muduo网络库,github地址https://github.com/chenshuo/muduo学习笔记:EventLoopThread类又叫IO线程类,专门用来处理IO事件。在它的线程函数里会创建一个EventLoop对象,执行loop循环处理IO事件。这个EventLoop对象会传递出去供外部对象使用,比如外部创建的socket、定时器会把他们的读写操作放到该loop循环中
2020-08-09 11:25:38
362
原创 muduo网络库之EventLoop类
本篇博客针对EventLoop类做下小结。博客代码来自于陈硕的muduo网络库,github地址https://github.com/chenshuo/muduo学习笔记:muduo网络库的线程类准许你one loop per thread,顾名思义每个线程只能有一个EventLoop对象,因此EventLoop独享的构造函数会检查当前线程是否已经创建了其它EventLoop对象,如果已经创建则终止程序。创建了EventLoop的线程就是IO线程,其主要功能是运行时间循环EventLoop::l
2020-08-08 19:41:37
445
原创 muduo网络库之Channel类
本篇博客针对Channel类做下小结。博客代码来自于陈硕的muduo网络库,github地址https://github.com/chenshuo/muduo工作原理:Channel对象自始至终负责一个文件描述符fd的IO事件分发,Channel对象通常被更上层的类拥有,比如TimerQueue,TimerQueue在构造期间会实例化一个定时器对象,timerfd_为该定时器fd,随后利用该定时器fd实例化一个Channel对象timerfdChannel_,设置该Channel的回调函数和ev
2020-08-07 09:25:43
650
原创 muduo网络库之TimerQueue类
这篇博客针对TimerQueue类做下小结。博客代码来自于陈硕的muduo网络库,github地址https://github.com/chenshuo/muduo工作原理:TimerQueue顾名思义表示该类管理这一个时间队列,这个时间队列的内部结构是std::set,该set的元素类型是std::pair<Timestamp, Timer*>,即先按时间戳对定时队列从小到大进行排序,对于时间戳相同的定时再按地址值排序,该set保证了定时队列按时间排序保存。TimerQueue类管
2020-08-06 09:23:42
379
原创 muduo网络库之Poller类
本片博客针对Poller类及其2个派生类PollPoller、EPollPoller做下小结。博客代码来自于陈硕的muduo网络库,github地址https://github.com/chenshuo/muduo工作原理:muduo网络库中Poller类是一个抽象类,用户使用PollPoller或者EPollPoller类。Poller类管理这一个文件描述符fd和Channel指针的映射表channels_,同一个IO线程内所有用户注册的文件描述符都保存在这里,包括定时器或socketfd等。该类
2020-08-05 11:21:44
445
原创 mutex&condition简单用法
多线程编程中为了保证共享对象的同步,经常组合使用mutex&condition,优点就是简单易用。多线程编程中往往需要组合使用thread、mutex、condition,而这三个类都包含在pthread.h中,他们的函数名也统一以pthread_开头。thread常用接口: pthread_create(父线程调用,创建子线程) pthread_exit(退出线程,不过当前线程资源不会立即释放,直到进程退出才行) pthread_join(父线程调用,父线程在当前...
2020-07-30 15:05:33
561
原创 图像处理之计算任意点与轮廓点集中距离最近的点坐标
opencv中计算任意一点P与轮廓C的距离很简单,可以直接调用pointPolygonTest函数获取,但是想要知道轮廓C中哪个点与点P的距离最近却没有现成的函数可用。思路一:一个最朴实的想法就是获取以点P为中心,半径为r的圆的坐标点集,一步步增大半径r,直到圆上某一点Q在轮廓C上,即点Q就是我们需要的点。考虑到效率问题,有2个地方可以优化一下:1>把轮廓C的点集额外保存成x坐标和y坐标...
2020-04-12 23:30:47
5690
3
原创 图像处理之二值图的图像分割
最近工作中需要对二值图进行图像分割,然而书上网上大多讲的是对灰度图的图像分割,思来想去觉得图像轮廓兴许是个突破口,利用轮廓点集中点与点之间的距离关系决定是否分割,事实证明分割效果可以达到不错的效果。具体思路:待分割区域为下图中白色部分,黑色部分是背景。该图片包括3个轮廓,分别是1个外侧轮廓和2个内侧轮廓(事实上我的项目场景中最多只会存在两层轮廓的嵌套关系),理想的分割方式是把白色连通区域中狭窄...
2020-03-07 17:37:20
4560
1
原创 图像处理之计算二值图的主方向
我理解的图像主方向:图像中灰度分布的趋势方向和X轴的夹角。思路:主方向的范围在[0,180)的区间内,可以让一条直线在这个范围内旋转一次,分别统计图像中感兴趣的点落在这条旋转轴上的像素个数分布直方图,该直方图的索引为原点到投影点的距离。由于该旋转轴通过原点,所以直线方程可以用(y = kx)表示(90°除外),图像上的点到旋转轴上的投影坐标可以很简单地计算出来。当旋转轴在角度α时,落在该旋转轴...
2020-03-02 23:17:53
3643
3
原创 Qt之OpenGL实时显示图像
工作中在用Qt写界面程序时需要完成一项功能:客户端和服务端连接成功后需要实时显示从服务端发送过来的图片,并可以用鼠标滚轮进行缩放以及拖拽。由于之前学习过些许OpenGL关于纹理贴图的技术,且Qt已集成OpenGL模块,因此打算用该技术完成。OpenGL显示图片使用GPU渲染,如果程序需要做到毫秒级的刷新频率,用该方法可以很大程度上缓解CPU的压力,图片的动态显示也更流畅。下面我用一个demo程...
2020-01-12 23:04:03
15360
23
原创 darknet源码分析之tiny-yolov2模型训练及测试
目录模型训练模型训练概览网络结构文件加载预训练权重文件加载数据加载数据增强网络训练模型测试前段时间在darknet框架上训练了tiny-yolov2,对于darknet这个C语言框架有了些自己的认识,遂记录于此。darknet在github上的url:https://github.com/pjreddie/darknet,darknet官网:https://pj...
2019-10-17 20:33:05
3484
3
原创 OpenGL学习笔记四(用自己编写的着色器绘制花托)
程序代码如下:#include <GLTools.h>#include <GLFrustum.h>#include <StopWatch.h>#include <GLMatrixStack.h>#include <GLGeometryTransform.h>#define FREEGLUT_STATIC#includ...
2018-09-04 15:49:14
656
原创 OpenGL学习笔记三(旋转带纹理的花托,球体,地板,点光源)
#include <GLTools.h>#include <GLFrame.h>#include <GLMatrixStack.h>#include <GLGeometryTransform.h>#include <GLShaderManager.h>#include <GLFrustum.h>#include ...
2018-09-03 19:13:08
1869
原创 OpenGL学习笔记二(绘制7种基本图元)
#include <GLTools.h>#include <GLMatrixStack.h>#include <GLFrame.h>#include <GLFrustum.h>#include <GLBatch.h>#include <GLGeometryTransform.h>#define FREEGLUT_...
2018-08-31 18:31:39
1028
原创 OpenGL学习笔记一(绘制三角形)
#include <GLTools.h>#include <GLShaderManager.h>#define FREEGLUT_STATIC#include <GL/glut.h>GLShaderManager shader;GLBatch batch;void changeSize(int w, int h){ //重新设置视口 gl...
2018-08-29 18:05:42
538
原创 MFC使用ado连接SQLserver
做个小工具,记录MFC中用ado连接sqlserver2008的简要步骤。 首先还是简要介绍一下吧(一下这段为网上摘抄) ADO接口简介 ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。 _ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如
2016-01-16 22:46:07
10572
3
原创 C++动态库导出类
有时候希望在将整个类导出到动态库以供调用,如何做呢?示例如下:我用VS2010首先创建了一个空的动态库工程用来生成一个供测试用的动态库,紧接着有创建一个空的win32控制台程序用来调用动态库的类,然后将这两个工程放到一个解决方案中。在各工程中新建头文件和源文件如下图:其中,动态库工程的头文件(header.h)如下所示:#ifndef HEADER_H#define HEAD
2015-09-15 01:53:21
13361
原创 派生类和基类的函数调用
这篇文章举了一个简单的例子说明派生类和基类在虚函数和普通函数的问题;首先声明派生类和基类,并进行定义,如下所示:声明部分(Header.h):class FATHER{public: void FUN1(); virtual void virtualFUN2();};class CHILD : public FATHER{public: void FUN1();
2015-05-13 22:57:05
4521
原创 子类继承父类,重写纯虚函数和虚函数时注意
今天遇到这么个问题,程序中定义了一个借口类,成员函数全是纯虚函数,我写的子类继承了这个接口类,但是报错提示说:无法实例化抽象类!原因是这样的:子类继承父类时,必须重写父类的纯虚函数,函数名、返回类型、参数个数和类型都不能改。若父类中的虚函数自己有定义,子类也可以不重写。测试如下:头文件test.h#pragma once#include "iostream"using namesp
2015-04-20 21:51:14
22829
原创 VC++动态库导出函数和类
导出动态库中的函数和类首先需要加载动态库,加载的方式有两种,分为:隐式加载和显示加载。(编译器:VC++ 6.0)对隐式加载还是显示加载的选择不明白请百度。(一)隐式加载动态库新建动态库工程,添加头文件和源文件,用以下几种方式分别导出“加减乘除”4个函数和point类,由于实现函数需要,因此添加了两个头文件。动态库工程头文件(dlltest.h)代码如下:#includ
2015-04-13 00:54:39
7523
QtOpenGLWidget.zip
2020-09-09
QtOpenglDemo.zip
2020-01-12
Edraw破解版6.1.7
2018-04-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人