OpenCv-C++学习记录
文章平均质量分 72
风极_陨
这个作者很懒,什么都没留下…
展开
-
使用Opencv在基于SSD-MobileNet迁移学习中生成pbtxt文件遇到的问题及解决方案
在迁移学习训练后,如果要是用opencv调用pb模型,需要的“佐料”是pbtxt文件,这个文件必不可少。我在使用opencv4.0.0中的tf_text_graph_ssd.py(文件路径在“D:\opencv\opencv_4.0.0\sources\samples\dnn”)生成pbtxt文件时,遇到了这样一个问题:Traceback (most recent call last): ...原创 2019-05-14 18:04:35 · 1886 阅读 · 17 评论 -
OpenCV-C++-CUDA-08-角点(特征点)检测
本章我们使用OpenCV-CUDA版本的角点检测加速(主要针对shi-tomas和harris角点检测)。主要API:cuda::createGoodFeaturesToTrackDetector()#include<opencv2/opencv.hpp>#include<opencv2/cudaimgproc.hpp>using namespace std;using原创 2020-06-23 16:39:25 · 1333 阅读 · 0 评论 -
OpenCV-C++-CUDA-07-基于颜色的物体跟踪
上一篇OpenCV-C++—CUDA-06-形态学二值化操作展示了二值图像、形态学在OpencCV-CUDA版本上的示例。本章我使用HSV颜色提取,以及形态学操作、联通区域来跟踪物体(跟踪下面偏黄色的小球)。先给一张inRange颜色过滤表:黑灰白红橙黄绿青蓝紫hmin0000,15611263578100125hmax180180180原创 2020-06-22 16:15:34 · 931 阅读 · 0 评论 -
OpenCV-C++-CUDA-06-形态学二值化操作
本章我们利用cuda加速实现形态学操作。我有这么一张图:当我使用cuda版的threshold()方法时:int main(int argc, char** argv){ Mat image = imread("F:/test/ABCDE.png",0); imshow("input image", image); cuda::GpuMat image_gpu, dst; image_gpu.u原创 2020-06-21 10:43:48 · 1121 阅读 · 1 评论 -
OpenCV-C++-CUDA-05-高斯双边加速,实时美颜
本章我们继续使用OpenCV-C++版本在CUDA下的编程应用,主要使用双边模糊,对图像进行美颜细化。1、高斯双边模糊int main(int argc, char** argv){ Mat image = imread("F:/test/face_image.jpg"); imshow("input image", image); cuda::GpuMat image_gpu,dst; image原创 2020-06-20 11:38:37 · 1208 阅读 · 1 评论 -
OpenCV-C++-CUDA-04-图像模糊和Sobel梯度
本章节我们来学习如何对图像进模糊操作。一、图像模糊1)普通模糊#include<opencv2/opencv.hpp>#include<iostream>using namespace cv;using namespace std;int main(int argc, char** argv){ Mat input_image = imread("F:/test/le原创 2020-06-06 13:31:44 · 1241 阅读 · 0 评论 -
OpenCV-C++-CUDA-03-图像直方图及几何变换
本章主要内容有图像的直方图计算、直方图均衡化、图像大小变换及旋转(当然了,基于CUDA)。一、直方图计算OpenCV GPU版本计算直方图的时候只能是单通道(这点跟CPU版本不一样),那么如果是多通道怎么办呢,一个一个计算呗。主要API:cuda::split() //通道分离cuda::calcHist() //计算直方图#include<opencv2/opencv.hpp>#原创 2020-06-06 11:28:06 · 1059 阅读 · 1 评论 -
OpenCV-C++-CUDA-02-图像基本操作之像素操作
本章继续学习CUDA下的OpenCV学习,主要是学习CUDA下图像的像素变换。一、图像之间的加减乘除(1) 图像相加主要API:cuda::add(input image1, input image2, output image)需要相加的两张图片:相关代码:#include<opencv2/opencv.hpp>#include<iostream>using n原创 2020-06-05 13:59:28 · 1751 阅读 · 5 评论 -
OpenCV-C++-CUDA-01-基本图像读取及灰度转换
长时间用着Python和深度学习框架,还是要回到图像处理篇,下面我就要重回图像处理(C++)篇了,以此来记录自己下一阶段的学习历程。 我们知道,一般的OpenCV基本都是基于CPU模块的,所以速度方面受限很大,而如果使用GPU来处理图像的话,性能会非一般的提升。本章主要是记录OpenCV和CUDA结合在C++上的应用,原创 2020-06-05 10:05:23 · 3251 阅读 · 4 评论 -
OpenCv-C++-深度神经网络(DNN)模块-使用goolenet模型实现图像分类
现如今深度学习最常用的有三大框架:caffe、tensorflow、torch/pytorch。基于这三大深度学习框架我们可以非常简单的实现很多功能,如图像分类、对象检测、图像分割、预测…接下来我们就来学习一下在opencv中怎么使用深度神经网络进行图像分类。如果OpenCv已经编译过了扩展模块了,已经有DNN模块了,如果没有编译过的话,据说在opencv3.3之后就已经在release版本...原创 2019-02-01 10:43:36 · 4649 阅读 · 10 评论 -
OpenCv-C++-视频分析与对象跟踪-对象检测与跟踪(基于颜色)
首先感谢贾志刚老师的教学视频及教学材料…本材料来自贾志刚老师:如上图所示,这是一张视频里面的截图,现在我们想要一直跟踪上图中绿色的飞盘。现在有如下几步:1、inRange()过滤------------过滤掉绿色飞盘以外的颜色;2、形态学操作---------------去噪点,强化飞盘轮廓;3、轮廓查找---------------查找飞盘轮廓;4、查找最大外接矩形-------...原创 2019-01-14 19:53:36 · 1834 阅读 · 4 评论 -
OpenCv-C++-视频分析与对象跟踪-背景消除建模
背景消除建模有2种方式:1、MOG2------高斯混合模型2、kNN---------k最近邻在OpenCv中也有相关的API:1、createBackgroundSubtractorMOG2(int history=500, double varThreshold=16,bool detectShadows=true);2、createBackgroundSubtractorKNN(...原创 2019-01-14 16:16:18 · 639 阅读 · 0 评论 -
OpenCv-C++-视频分析与对象跟踪-视频与摄像头读写
OpenCV中如何读取一个视频以及打开一个摄像头。我们还可以获得帧率,一般来说,1s如果能有15帧的话这个视频比较流畅,人眼分辨不出来它是图片。帧率显示:在OpenCv中,读取视频时能显示帧率,主要用到的函数是double fps = capture.get(CV_CAP_PROP_FPS);当然,读取摄像头时这个函数就不管用了。视频写入:我们对从摄像头获取的视频,将它写入到本地路径中,...原创 2019-01-14 11:03:18 · 811 阅读 · 0 评论 -
OpenCv-C++-01-KMeans-聚类
112121原创 2019-04-15 18:26:01 · 2718 阅读 · 0 评论 -
OpenCv-C++-HAAR级联数据文件结构与精简
OpenCv中有一些自带的已经训练好的数据,那么接下来大致的对部分数据信息进行讲解。上图是基于Harr的训练数据,我在VS2017中打开一个文件,比如第一个文件:haarcascade_eye.xml。先来看看第45-49行:PS:第一眼看到这种结构我觉得跟Html有点像。46:BOOST表示分类器是基于AdaBoost的结构进行训练的。47:HAAR则是基于HAAR的方式进行训练的...原创 2019-01-12 22:08:34 · 423 阅读 · 0 评论 -
OpenCV-C++-级联分类器训练与使用(2、猫脸检测)
OpenCv中也有自带的训练好的猫脸的数据集:上面2个选中的问价就是训练好的猫脸数据集。具体路径在D:\OpenCv_3.4.1\opencv\build\etc\haarcascades里面。代码:#include<opencv2/opencv.hpp>#include<iostream>using namespace cv;using namespac...原创 2019-01-11 18:37:50 · 652 阅读 · 0 评论 -
OpenCv-C++-深度神经网络(DNN)模块-使用FCN模型实现图像分割
FCN是什么?中文名称是“全卷积网络”,它将传统CNN中的全连接层转化成一个个的卷积层。在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。如下图所示:参考文章:https://blog.csdn.net/williamyi96/article/details/77415190https://...原创 2019-02-18 21:57:30 · 3467 阅读 · 1 评论 -
OpenCv-C++-小案例实战-对象提取与测量(面积、周长)
有这么一幅图:我想提取并且测量中间陨石的面积与周长。解决方法:1、模糊;2、二值化;3、形态学操作;4、轮廓发现+面积周长计算。1)高斯模糊因为陨石周围有许多小块的陨石,我们可以把它们当做噪点,可使用高斯模糊来去除。Mat GaussImg; GaussianBlur(src, GaussImg, Size(7, 7), 0, 0); imshow("Gauss Image...原创 2018-12-30 22:10:39 · 4514 阅读 · 0 评论 -
OpenCv-C++-深度神经网络(DNN)模块-使用SSD模型实现对象检测
首先我们要搞明白图像分类和对象检测的区别:1、图像分类:图像分类就是将这幅图像归为某一类,图像中的对象尽量要单一。2、对象检测:对象检测就是将不同的对象用框圈出来并规定为某一类,对象可以多个。SSD模型下载:...原创 2019-02-17 16:24:17 · 3119 阅读 · 3 评论 -
OpenCv-C++-视频分析与对象跟踪-扩展模块中的多对象跟踪
在OpenCv扩展模块中,有一个API可以实现视频中的多对象跟踪,它跟单对象跟踪有一定的区别但又有一定的联系。多对象跟踪中我们需要选择对个ROI区域,这里主要是用KCF方法,因为它速度快,基本好用,但是一旦对象离开窗口再出现时就会有极大的误差。对应论文:High-Speed Tracking with Kernelized Correlation Filters其余跟踪算法及KCF相关原理:...原创 2019-01-31 12:39:14 · 453 阅读 · 0 评论 -
OpenCv-C++-亚像素级别角点检测(检测子像素中的corner的位置)
使用亚像素角点检测,返回角点的浮点数值,它比整数像素更准确。使用函数:void cv::cornerSubPix ( InputArray image,InputOutputArray corners,Size winSize,Size zeroZone,TermCriteria criteria)#include&lt;opencv2/opencv.hpp&gt;#...原创 2018-11-26 20:43:46 · 1312 阅读 · 1 评论 -
OpenCv-C++-03-高斯混合模型GMM
121原创 2019-05-21 15:46:08 · 548 阅读 · 0 评论 -
OpenCv-C++-02-KMeans-图像分割
关于KMeans上一篇文章有提到,也用了一些随机点进行数据分类,那么图像呢?图像也是一堆数据,我们只需要把1图像转变为一组数据即可进行数据分类,然后重新显示在图像上,这就是图像分割。代码部分与上一章文章没多大区别,只需稍作改动即可:#include<opencv2/opencv.hpp>#include<iostream>using namespace cv;u...原创 2019-04-15 21:09:17 · 1491 阅读 · 0 评论 -
OpenCv_C++-PCA原理与应用
主成分分析PCA,最主要在数据处理中用来降维,比如说我们有1000组数据,每组数据有1000个样本,我们通过分析每组数据中的主要特征,剔除那些不必要的特征,使得数据的维度有所减少,以加快计算机计算的速度。进行PCA变化时主要有以下特征:1、主成分不变;2、有细微损失;3、高维数据到低维数据。进行PCA降维的主要步骤如下:上图中的步骤比较抽象,其实就是经过一步步的矩阵运算得到最终的新的数...原创 2019-03-05 11:40:43 · 1610 阅读 · 0 评论 -
OpenCv-C++-深度神经网络(DNN)模块-使用GOTURN模型进行对象跟踪
关于GOTURN的来源,可以查看论文原文:http://davheld.github.io/GOTURN/GOTURN.pdf在作者文章中提到,利用GOTURN进行神经网络训练,对跟踪的对象能够实时进行跟踪,且FPS能够达到100,但是只限于在GPU上,对于CPU,还是有点不理想。下图中,我们先框定前一帧的对象,即下图中的“what to track”,然后在当前帧中搜索可能的对象,即“sea...原创 2019-02-25 12:23:52 · 1371 阅读 · 2 评论 -
OpenCv-C++-深度神经网络(DNN)模块-使用CNN模型预测性别与年龄
原创 2019-02-24 10:40:43 · 2335 阅读 · 0 评论 -
OpenCv-C++-深度神经网络(DNN)模块-使用MobileNet模型实现实时对象检测
上篇文章中使用了SSD模型进行对象检测,虽然没有说明模型运行时间,但是ssd是非常耗时的,速度有点慢,因为它的支持数目比较多。而MobileNet其实就是ssd的删减版,运作速度有所提升,但支持的检测对象比较少。所以它是一种轻量级网络,主要应用于移动端。具体需参考以下文章:https://blog.csdn.net/u011974639/article/details/79199306http...原创 2019-02-17 22:45:59 · 2294 阅读 · 0 评论 -
OpenCv-C++-小案例实战-透视变换
现在有这么一张图片:原创 2018-12-30 20:18:32 · 2058 阅读 · 3 评论 -
OpenCV-C++-级联分类器训练与使用(1、人脸检测)
OpenCv中已经有训练好的人脸数据集,所以我们直接就可以拿过来进行检测。还有一些其余的训练好的数据:具体路径:D:\OpenCv-3.4.1\opencv\build\etc\haarcascades#include&lt;opencv2/opencv.hpp&gt;#include&lt;iostream&gt;using namespace cv;using namespace...原创 2019-01-03 21:09:47 · 1226 阅读 · 3 评论 -
OpenCv-C++-SIFT特征检测
引用及参考博客:https://blog.csdn.net/lyl771857509/article/details/796751371、SIFT综述尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量,此算法由 David Lowe在19...原创 2018-11-27 22:14:16 · 6011 阅读 · 0 评论 -
OpenCv-C++-凸包操作
什么是凸包?简单点就是在一幅图像里面有很多点,而有一些点连成的形状能够把所有点包围进去。使用OpenCv怎么做?1、先将图片转化为灰度图像;2、转化为二值图像;3、找到图片的全部轮廓点;4、使用凸包API从全部轮廓点中找到最优轮廓点;5、连接凸包轮廓点凸包使用的API是convexHull()下面看代码:#include<opencv2/opencv.hpp>#in...原创 2018-11-30 12:31:06 · 1562 阅读 · 1 评论 -
OpenCv-C++-轮廓发现
#include<opencv2/opencv.hpp>#include<iostream>#include<math.h>using namespace cv;using namespace std;Mat src,dst;void contours(int, void*);int thresholdMax = 255;int thresh...原创 2018-11-30 12:30:09 · 491 阅读 · 0 评论 -
OpenCv-C++-反向投影(直方图)
#include<opencv2/opencv.hpp>#include<iostream>#include<math.h>using namespace cv;using namespace std;//直方图反映的是统计的信息,它反映了图像中像素值在特定范围(ranges)内的像素个数(bin)。Mat src,hsv;Mat hue;i...原创 2018-11-30 12:29:01 · 385 阅读 · 0 评论 -
OpenCv-C++-SURF特征检测
SURF采用的是Hessian矩阵(SURF算法核心)行列式近似值图像。SURF(加速版的具有鲁棒性的特征,SpeededUp Robust Features),SURF是尺度不变特征变换算法(SIFT算法)的加速版。SURF最大的特征在于采用了harr特征以及积分图像的概念。而Hessian矩阵是Surf算法的核心,为了方便运算,如果函数f(z,y),Hessian矩阵H是由函数,偏导数组成。...原创 2018-11-26 22:17:52 · 935 阅读 · 0 评论 -
OpenCv-C++-HOG特征检测算法
HOG主要是用来做行人检测的,HOG方法是基于对稠密网格中归一化的局部方向梯度直方图的计算。此方法的基本观点是:局部目标的外表和形状可以被局部梯度或边缘方向的分布很好的描述,即使我们不知道对应的梯度和边缘的位置。在实际操作中,将图像分为小的元胞(cells),在每个元胞内累加计算出一维的梯度方向(或边缘方向)直方图。为了对光照和阴影有更好的不变性,需要对直方图进行对比度归一化,这可以通过将元胞组成...原创 2018-11-29 22:27:29 · 1965 阅读 · 0 评论 -
OpenCv-C++-自定义角点检测器(shi-tomashi自定义)
前面学过了自定义角点检测器(Harris),现在学习tomasi自定义角点检测,总体上来说tomasi的代码计算量比较harris少,具体步骤跟harris自定义角点检测类似,主要少了**“计算响应”**(在博客自定义角点检测器(harris自定义)的代码注释里)的那一步,主要使用cornerMinEigenVal()函数来计算最小特征值。参考:https://blog.csdn.net/u01...原创 2018-11-25 19:36:37 · 717 阅读 · 0 评论 -
OpenCv-C++-Harris角点检测
首先,感谢贾志刚老师的课程教学。理论部分:我现在将代码放入:#include<opencv2/opencv.hpp>#include<iostream>#include<math.h>using namespace cv;using namespace std;void Harris_demo(int,void*);int thres_v...原创 2018-11-19 22:52:55 · 2150 阅读 · 0 评论 -
OpenCv-C++-自定义角点检测器(harris自定义)
学习了前面的harris角点检测之后,现在利用harris原理来自定义角点检测器,主要使用cornerEigenValsAndVecs()函数。参考:https://blog.csdn.net/weixin_41695564/article/details/79979784该函数参数解释如下: src:输入图像矩阵,即单通道8位或者浮点类型的图像。 dst:输出矩阵,即用来存储...原创 2018-11-23 21:55:10 · 1041 阅读 · 0 评论 -
OpenCv-C++-Shi-Tomasi角点检测
这次的tomasi跟上次的harris比,两者原理上很像,可以说tomasi是harris的进化版。个人觉得,如果做角点检测的话,首选tomasi,因为它优化很好,响应速度比harris快。拖动TrackBar时,真的快如风,但使用harris时,有时还会崩掉。tomasi基本原理如下:相关API使用及说明:上面截图来自于贾志刚老师的ppt页面,在此感谢贾志刚老师!下面附上源代码:#...原创 2018-11-21 21:51:13 · 915 阅读 · 0 评论 -
OpenCv-C++-基于距离变换与分水岭的图像分割
在这里,先感谢贾志刚老师的教学,我今天学习了图像分水岭分割,什么是图像分割呢?借用贾志刚老师的课件,如下图所示:其实大致就是将下面图1变成图2的样子:图1:图2:或:具体操作有什么步骤?看下图:下面附上代码(具体解释代码已注释):#include<opencv2/opencv.hpp>#include<iostream>#include<...原创 2018-11-18 20:06:38 · 940 阅读 · 0 评论