- 博客(54)
- 收藏
- 关注
原创 SICE:基于CNN的多曝光图像增强网络论文解读
目录一、 文章摘要概述这是一篇2018年图像处理领域Top之一的TIP期刊文章,针对过曝光/欠曝光的单图像对比度增强(SICE),相较于之前的调整色调曲线以矫正输入图像的对比度不能有效增强图像细节问题,提出使用卷积神经网络(CNN)分步训练多个SICE图像增强器,在提升图像对比度同时保恢复了图像细节。为此,文章创新性的做了如下工作:建立一个大规模的多曝光图像数据集,包含多场景高分辨率图像序...
2019-11-28 22:11:47 5785 2
原创 MinGW使用std::thread报错error: ‘thread‘ is not a member of ‘std‘
MinGW报错未识别std::thread
2024-04-04 21:21:07 873
原创 librdkafka官方Demo在Windows上运行与使用
用了将近两天时间中与把Kafka官方demo跑起来了!记录一下下踩坑过程。1、安装kafka是跑在zookeeper上的,需要依次安装 JDK、zookeeper和Kafka,并配置环境变量。这里参考教程:在Windows安装运行Kafka基本没问题。目录如下:【注】vcpkg是官方提供的安装方式,可以不下载。2、git lone官方源码https://github.com/edenhill/librdkafka3、cmake生成工程得到Rdkafka.sln解决方案4、在Debug或Re
2021-11-04 11:57:52 3456
原创 QT:QDomDocument读取解析XML内容
今天在做模拟仿真项目时,需要读取并解析XML文件,读取仿真配置参数,一般来说解析配置参数或者需要经常读存的地方就需要用到解析XML文件。下面给一段小demo来解析XML文件:void ReadXML(){ QDomDocument doc; QFile file(".../×××.xml"); if(!file.open(QIODevice::ReadOnly)) return 0; if(!doc.setContent(&file)) { file.close(); re
2021-10-30 17:18:44 1443
原创 CMakeLists指定项目安装目录
cmake的install命令可以指定项目或工程的安装目录:参考CMake–install官方手册这里仿照上面官方样式,CMakeLists可以给出一个一般写法:CMAKE_MINIMUM_REQUIRED(VERSION 3.5)PROJECT([targetName])FIND_PACKAGE(Qt5 Network Widgets ...)#c++标准SET(CMAKE_CXX_STANDRAD 11)SET(CMAKE_INCLUDE_CURRENT_DIR ON)#...#
2021-10-28 19:57:08 2232
原创 QT筛选指定路径文件路径以及文件名
//筛选指定目录下文件路径QString path= QApplication::applicationDirPath() + "/temp";QDirIterator it(path,QStringList() << "*.txt"<<"*.png",QDir::Files);while(it.hasNext()){ QString str = it.next(); qDebug()<<"filePath:"<<str<<
2021-10-27 15:35:29 1137
原创 Windows快速安装Torch1.8.1+torchvision0.9最新教程
网上很多Torch/Torchvision安装教程但是大部分都不实用,根据我的安装经验先介绍之前安装所出现的问题吧Torch不像numpy/pandas等这些包体积小,在Prompt/cmd终端通过pip或conda就能快速安装,所以通过一行命令往往装到一半就超时了,即是通过清华、阿里源镜像安装还是会超时。这篇Blog就是介绍通过源文件(xxx.whl)下载快速安装Torch的!1、进入PyTorch官网,在首页选择安装版本这里根据自己电脑的配置要求,选择操作系统、cpu/gpu等。一步安装的方法
2021-03-25 16:14:16 13624 5
原创 CMake生成yaml-cpp解决方法后在VS中编译时出现LNKxxxx: 无法解析的外部符号
在编写一些比较大的项目文件时,通过配置文件来修改参数可以很好避免在源文件中修改参数要重新编译的问题。虽然在源文件修改参数可能更直观,但是在特殊情况下还是要自行编译的,比如缺少编译器时,我们通过修改配置文件运行exe程序就能避免这些问题。常见的配置文件有xml、yaml、json等。最近看到一篇介绍yaml的文章:实践+原理从文件或终端读写yaml和txt文件,通过https://github.com/jbeder/yaml-cpp.git下载yaml-cpp源文件在Linux上进行make/install进
2021-03-24 16:51:24 2605
原创 由前序遍历、中序遍历重构二叉树
由前序遍历和中序遍历可以重构二叉树,通过给定的前序遍历(preOrder)和中序遍历数组(inOrder)。思路是:首先,在中序遍历中找到与前序遍历首元素相同的元素,然后,可以把前序遍历和中序遍历分割为四个数组,前序遍历的两个分割数组表示根结点左右子树的前序遍历;中序遍历的两个分个数组表示根结点左右子树的中序遍历,最后,通过递归的方式不断向下寻找根结点,直到所有结点分割完成。C++代码实现:#include<vector>using namespace std;struct Tre
2020-09-10 11:23:06 462 1
原创 C++三行代码搞定经典例题:一个数组第K小的数
有些面试题都会借用求解数组第K小(大)的数来考察对排序算法的熟练度,如果不要求time和storage会有一大堆方法,比如快排、插入排序等等,还可以构建K个元素的最小堆等等实现,如果是面试题重写排序算法浪费时间,这里利用C++ STL和Algorithm库函数去实现,可以快速通过笔试测试,代码如下:以nums数组为例://包含vector 、algorithm等头文件int K_max(vector<int>& nums,int k){ sort(nums.begin(),num
2020-09-02 14:31:10 444
原创 小红书2020校招算法题(三)
目录一、笔记草稿二、笔记精选一、笔记草稿题目描述:薯队长写了一篇笔记草稿,请你帮忙输出最后内容。输入字符包括,"(" , “)” 和 "<"和其他字符。其他字符表示笔记内容。()之间表示注释内容,任何字符都无效。 括号保证成对出现。"<“表示退格, 删去前面一个笔记内容字符。括号不受”<"影响 。Input:一行字符串。长度<=10000.Output:一行字符串,表示最终的笔记内容。示例:输入Corona(Tr
2020-08-31 16:18:25 865
原创 Leetcode刷题Task03:双指针(C++)
双指针一、双指针的概念二、两类双指针方法三、对撞指针3.1 思想3.2 对撞指针的C++实现模板3.3 LeetCode相关例题3.3.1 两数之和四、快慢指针4.1 思想4.2 快慢指针的C++实现模板4.3 LeetCode相关例题4.3.1 环形链表4.3.1 环形链表 II一、双指针的概念在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。双指针法可以充分使用了数组有序的特征,从而在某些情况下能够简
2020-08-28 16:25:16 253
原创 Leetcode刷题Task03:查找(C++)
查找(Search)一、查找的概念:二、C++ STL中实现查找常用的容器三、五种常用查找算法与C++实现:3.1 顺序查找(SequentialSearch)3.2. 二分查找(BinarySearch)3.3 树表查找(STSearch)3.4 斐波那契查找(FibonacciSearch)3.5 插值查找(InsertionSearch)四、C++实现LeetCode查找相关例题4.1 LeetCode290-单词规律一、查找的概念:查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查
2020-08-26 14:00:30 227
原创 Leetcode刷题Task02:动态规划算法(C++)
动态规划(Dynamic Programming,DP)一、概念二、思想或策略三、步骤四、DP适用的情况五、C++实现DP的一般模板六、C++实现LeetCode动态规划相关例题6.1 Leetcode5–最长回文子串6.2 Leetcode72–编辑距离七、总结一、概念百度百科中DP算法的概念为:动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出
2020-08-21 18:45:39 494
原创 Leetcode刷题Task01:分治算法(C++)
分治(divide-and-conquer)算法一、概念二、思想或策略三、步骤四、分治适用的情况五、C++实现分治算法的一般模板六、C++实现LeetCode分治相关例题6.1 Leetcode50--Pow(x,n)6.2 Leetcode169--多数元素6.3 Leetcode53--最大子序和七、总结一、概念百度百科中分治算法的概念为:分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成
2020-08-19 15:24:14 996
原创 【资源分享】VS2015+cmake+opencv3.4/opencv_contrib3.4编译装载好的库文件
1、前言学习OpenCV避免不了使用特征描述子如SIFT/Surf、三维重构、脸部识别等功能,这些功能在opencv官方全部放在了opencv_contib模块,这是个扩展模块:针对一些未授权(申请专利)、性能不稳定或功能性较弱的图像模块。虽然最新版本OpenCV4.2已将专利过期的SIFT算法移入主模块,但是对于想使用双目立体匹配算法、结构光等新的算法及有专利权未过期算法的同学需要使用Cmake自行编译。参考Blog:1、opencv3.0中contrib模块的添加2、win7x64+vs2017
2020-08-01 11:34:44 430 1
原创 特征检测Task01-Harris角点检测
目录1、前言2、角点3、Harris角点检测3.1 原理3.2 Harris角点性质4、基于python-opencv的实现1、前言在图像处理与计算机视觉邻域,特征点(Feature points),也被称为关键点(Key points)、兴趣点(Interset points),是三大图像特征之一。在传统CV图像处理过程中,被大量用于物体识别、图像识别、视觉跟踪、三维重建等领域。利用提取的特征点不仅可以有效表现图像的属性和行为,而且减小了内存,提高了图像处理的效率。常用的特征点检测算子有Harris角
2020-06-24 17:48:32 359
原创 Leetcode-编辑距离
原题链接:https://leetcode-cn.com/problems/edit-distance/description/1、题目描述:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)ro
2020-06-04 22:03:22 247
原创 Task5:Pytorch模型集成
一、前言集成学习是指通过构建并结合多个学习器来完成学习任务的分类系统。在机器学习中可以通过Stacking、Bagging、Boosting等常见的集成学习方法来提高预测精度,而在深度学习中,可以通过交叉验证的方法训练多个CNN模型,然后对这些训练好的模型进行集成就可以得到集成模型,从而提高字符识别的精度。如下图:以上通过10折交叉验证,可训练得到10个CNN模型,集成方法有:平均法:将10个模型预测结果的概率取平均值,然后解码为具体字符投票法:对10个模型预测结果进行投票,得到最终字符
2020-06-02 19:21:28 4504
原创 Task4:Pytorch实现模型训练与验证
目录一、前言二、模型训练与验证三、保存模型与调参一、前言DL中,当构建了一个CNN模型,只是定义了一个Input、Output接口,无论是单张图片还是Batch多张图片,都需要取训练这个模型以达到目的得参数,训练一个模型一般有三个步骤:分别定义两个数据集trainsets和validsets,分别完成模型的训练与验证保存最优参数(权重、偏置等)记录trainsets和validsets的精度,便于调参。通过以上的步骤,可以得到CNN模型的参数了,利用训练的参数可以对任意输入图像进行测试了。
2020-05-30 22:53:31 17727 8
原创 Task3:Pytorch构建简易CNN字符识别模型
目录一、前言二、Pytorch构建简易CNN模型一、前言在上一节中我们将Datasets封装成DataLoder,可以完成数据集的读取,实际训练过程还需要构建一个CNN模型,通过fetch数据的方式,来训练出我们所期望的模型参数,从而完成字符识别的任务!二、Pytorch构建简易CNN模型import torchtorch.manual_seed(0)torch.backends.cudnn.deterministic = Falsetorch.backends.cudnn.benchmark
2020-05-26 22:19:45 489
原创 Task2:Pytorch数据预处理--数据读取与数据扩充
目录一、前言二、数据扩充2.1opencv对图像数据扩充常用Method2.2 Torchvision对图像数据进行扩充常用Method2.3 GAN生成扩充数据三、Pytorch实现数据读取与扩充一、前言在深度学习模型的训练过程中,为了保证模型的泛化能力,通常需要做数据扩充(Data augment),即在原有数据基础上,通过数据变换来生成新的数据从而扩大训练集,提高模型的泛化能力。二、数据扩充使用Python对图像数据处理来说,常用的Package有:opencv-pythonPillow
2020-05-23 22:21:57 3521
原创 Jupyter-notebook中import cv2失败: ImportError: DLL load failed: 找不到指定的程序。
在Windows配置各种opencv、opencv-python,没想到今天掉坑了去了 :使用jupyter notebook遇到这种Bug我也是无语,问题是这样的:通常遇到Python安装包问题,一般思路是在DOS中激活Python环境,直接输入import PackagePackage是有问题的安装包,来查看虚拟环境中是否成功安装该包,如果没报错说明在虚拟环境中包安装成功。结果我发现没啥问题,但还是报错。考虑从下面几个方面找问题:可能是opencv没安装完整的问题,于是//在V
2020-05-21 23:57:02 4266 5
原创 Datawhale入门CV比赛- 街景字符编码识别(一)
目录前言赛题理解1 学习路径2 运行环境及常用Package安装3 赛题展示4 思路分析5 Datawhale与Tianci官方资料(方便后续查询)前言之前做一些Traditional Image process的任务,这次借助Datawhale重新学习下Deep learning Image process的知识,由于没有下载破解版的pycharm,正好可以熟悉下Jupyer-Notebook搭建网络的方式。希望通过后面几次Tasks的学习,完成几个小目标:熟悉Pytorch,并搭建简单的网络模型
2020-05-20 22:54:41 265
原创 OpenCV实现图像卡通化
一、前言今天介绍一个有趣的demo,结合之前图像空域滤波和边缘检测的知识,实现图像卡通化,通过实现的过程,可以发现几种图像边缘检测和差异和图像滤波的性质。Demo来自《Mastering OpenCV with Practical ComputerVision Projects》(目前没见到中文版),可以在网上下载Ebook。附Github地址:https://github.com/MasteringOpenCV/code二、图像卡通化实现原理解析实现原理:图像卡通化的过程,实际上是对图像的内
2020-05-12 14:33:59 5711 1
原创 OpenCV实现图像轮廓检测、绘制与应用
目录一、前言二、轮廓检测与绘制函数解析三、fillContours+drawContours基本用法一、前言在上一文中,绘制多边形最小外接矩形中用到了fillContours() 函数,它可以在二值图像中查找图像轮廓,本文结合fillContours和drawContours函数,讲解一下轮廓查找与绘制的过程。首先明确一下图像边缘并不代表图像轮廓,图像轮廓也不能全部表示边缘信息,他们之间的区别与联系如下:区别:边缘检测是通过一些方法来检测图像中灰度变化(明暗变化)较大的像素点,偏向于像素点的差异
2020-05-11 11:07:58 1142 2
原创 OpenCV绘图函数总结与应用
目录1、前言2、基本绘图函数3、原子图绘制4、多边形绘制+最小外接矩形5、鼠标绘图+最小外接矩形1、前言图像处理中经常用到基本图形的绘制,比如直线、圆、矩形,在上一文中在直方图绘制中使用了OpenCV的line()函数来绘制直方图,不仅如此,基本图形在很多大型项目中也会频频使用,比如物体识别中,就需要绘制矩形来框选物体所在区域作为候选区,方便后续特征识别处理,本文通过介绍OpenCV基本绘图函数,如line()、Rectangle()等,来完成原子图绘制,另外拓展两个小demo绘制任意多边形并求最小
2020-05-10 00:05:54 649
原创 OpenCV灰度直方图绘制的两种方式
一、前言直方图(Histogram)是对数据进行统计的一种方法,也是直观表现数据分布特征的一种表现方式。在数字图像分析过程中,通过图像的灰度、梯度、方向和颜色等特征属性的分布直方图我们能更客观分析图像的某些特征,对直方图的分布进行处理(如重排、区间映射等),往往能达到我们想要的视觉效果,比如:对灰度直方图进行均衡化处理,扩散灰度区间,可以有效调整图像对比度,以达到图像增强的目的,所以在传统低光照...
2020-05-07 23:56:15 5540 1
原创 OpenCV图像遍历的三种方式
一、三种图像遍历方式与理解 在上一篇Blog中,介绍了使用基础图像容器Mat创建图像矩阵的六种方式,当我们使用创建的Mat矩阵进行图像处理时,需要对Mat矩阵中像素点进行遍历操作,图像像素点的遍历是任何图像处理算法必不可少的执行步骤。在OpenCV中提供了3种图像遍历的方法:.at()函数访问.ptr函数获取行指针逐行访问iterator迭代器访问这三种方式在访问速度上有所差异,...
2020-05-06 00:27:48 4999 1
原创 OpenCV基础图像容器-Mat用法总结
这里写目录标题一、前言二、概述三、Mat对象创建四、C++实现Mat图像矩阵创建一、前言OpenCV的API库在最开始时一直是基于C接口构建的,使用C语言结构体指针IplImage*存储图像,需要繁琐的内存管理,如果创建了IplImage指针,使用完成后不release掉的话就会造成内存泄漏,使用起来极为不便!辛运的是,OpenCV2.0版本中引入了新的C++接口,通过类进行自动内存管理,并定...
2020-05-04 23:55:48 1230 3
原创 计算机视觉基础-形态学滤波
Task07 OpenCV框架实现形态学滤波一、前言二、形态学概述三、基本形态学操作3.1腐蚀3.2膨胀四、高级形态学操作4.1开闭运算4.2形态学梯度4.3黑帽顶帽五、基于OpenCV的C++代码实现一、前言图像形态学滤波是图像滤波的一个重要分支,与之前介绍过的空间域滤波(方框滤波、高斯滤波、中值滤波)以及图像边缘提取过程中的滤波相同的是,他们都是通过滤波算子掩膜计算图像(中心)像素点的过程...
2020-05-03 17:50:27 9576 2
原创 计算机视觉基础-图像边缘检测
Task06 OpenCV框架实现常用边缘检测方法一、前言二、边缘检测的原理和理解2.1 边缘检测的定义2.2 Sobel算子2.3 Canny算子2.4 Laplace算子三、基于OpenCV的C++代码实现一、前言图像的特征可分为三种类型:(1)边缘、(2)角点、(3)区域,其中图像的边缘没有明确的定义,一般是指:两个具有不同灰度的均匀图像区域的边界称为边缘。一般来说,图像边缘信息主要集中...
2020-04-30 22:50:31 3207
原创 计算机视觉基础-图像分割(阈值化)
Task05 OpenCV框架实现基于阈值化的图像分割一、前言二、阈值化图像分割2.1原理2.2OTSU(最大类间方差法)2.3自适应阈值分割法2.4最大熵阈值分割算法三、基于OpenCV的C++代码实现一、前言图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内表现出一致性或相似性,而在不同区域间表现出明显的不同。简单的说就是在一副...
2020-04-28 23:04:45 5489 1
原创 计算机视觉基础-图像滤波
Task03 OpenCV框架实现图像滤波一、前言二、图像滤波概念与解析2.1图像滤波概念2.2空域滤波2.3方框(盒状)滤波2.4均值滤波2.5高斯滤波2.6中值滤波2.7双边滤波三、基于OpenCV的C++代码实现一、前言说到滤波,第一时间想到在数字通信中的信号滤波,通常在频率域处理连续信号可以滤除特定波段的频率,比如,允许通过低频信号通过而限制高频的低通滤波器,允许高频信号通过而限制低频...
2020-04-27 11:34:13 1977
原创 计算机视觉基础-图像色彩空间转换
Task03 Opencv框架实现色彩空间转换一、前言二、几种常用彩色模型2.1彩色模型概念2.2RGB彩色模型2.3CMYK色彩模型2.4YUV色彩模型2.5YCbCr2.6HSV2.7HSI2.8彩色变换公式三、基于OpenCV的代码实现一、前言说到色彩,我不禁想起白居易的一首诗,也是自己非常喜欢的一首诗:暮江吟暮江吟暮江吟一道残阳铺水中,半江瑟瑟半江红。一道残阳铺水中,半江瑟瑟半江红。...
2020-04-25 23:32:32 2014
原创 十大经典排序算法-分析与C++代码实现
十大经典排序算法-分析与C++代码实现一、前言二、排序(Sorting)算法概念2.1排序算法定义2.2相关概念与对比三、十大经典排序算法原理、图解与代码实现3.1冒泡排序3.2选择排序3.3插入排序3.4希尔排序3.5归并排序3.6快速排序3.7堆排序3.8桶排序3.9计数排序3.10基数排序一、前言二、排序(Sorting)算法概念2.1排序算法定义排序在百度百科中的解释为:排序是...
2020-04-25 11:53:09 628
原创 STL常用容器解析
STL常用容器解析前言关联容器关键字(Key)有序mapsetmultimap,关键字可重复出现multiset关键字(Key)无序unorder_mapunordered_setunordered_multimapunordered_multiset关联容器前言刷题过程中,有两个步骤最为关键:1、思路与解析,一道题能否找到解题的思路决定了能否做的出来,有明晰的思路就能够脑海里通过算法与数据...
2020-04-24 13:07:05 186
原创 计算机视觉基础-图像仿射变换
Task01 OpenCV框架与图像仿射变换一、仿射变换原理1.1仿射变换过程1.2坐标系与变换矩阵二、仿射变换的种类与特点2.1仿射变换种类2.2仿射变换特点2.3仿射变换相关函数仿射函数翻转函数缩放函数三、基于OpenCV的代码实现一、仿射变换原理1.1仿射变换过程百度词条定义为:仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。...
2020-04-23 23:37:41 3432
原创 VS code配置C/C++、OpenCV(Windows)
目录一、前言二、编译器、编辑器、链接器与IDE2.1编译器2.2编辑器2.3链接器2.4IDE三、配置环境四、VScode搭建C/C++环境4.1安装VScode+Mingw644.2添加扩展工具4.3C/C++编译与调试五、OpenCV+cmake配置六、测试一、前言由于今年疫情影响,很多计划内的事情都泡汤了,鉴于下学期找工作需要,决定自己在家学习C/C++、OpenCV,刷刷题。这时候找一...
2020-04-22 22:17:38 21118 46
原创 计算机视觉基础-图像插值算法
Task01 OpenCV框架与图像插值算法线性插值1、单线性插值1、双线性插值待续插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入线性插值1、单线性插值线性插值是一种针对一...
2020-04-21 19:00:35 1686
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人