
opencv
学习OpenCV笔记
Harmony_Launch
这个作者很懒,什么都没留下…
展开
-
【opencv学习笔记(二十四)】之形态学操作识别试卷下划线(附源码)
一. 需求: 从试卷答题纸上匹配到填空题的下划线,并标记出所有直线。二. 思路: 直接用边缘查找,然后霍夫变换直线的方法是行不通的,检测效果不好。 我们的解决思路是:通过形态学操作来寻找直线,然后用霍夫变换标定直线。三. 具体操作:(一) 首先对图像进行二值化,能原创 2020-07-15 23:10:14 · 505 阅读 · 0 评论 -
【opencv学习笔记(二十三)】之扫描文件截取边缘(附源码)
一. 问题描述: 扫描仪扫描出来的文件图片,有多余的白边,需要将白边去掉 ,只留下有用的信息。且图片也可能放歪,扫描进来旋转的图片。二. 竖直放置图像的解决思路:(一)思路 通过边缘检测找到边缘,然后通过边缘找到轮廓,再通过轮廓找最大的外接矩形,(二)具体流程 1. 首先用Canny边缘检测,并设置一个窗口的滑动阀,可以通过原创 2020-07-12 09:53:51 · 1339 阅读 · 0 评论 -
【C++学习笔记(三)】OpenCV4.1.0及OpenCV_contrib4.1.0,cmake编译到 VS2019;提示缺少boostdesc_bgm.i文件等问题的解决方法
错误报告的原因:Opencv_contrib 需要自己编译,我们选用的是cmake进行编译在cmake中设置好路径,进行configure,标红了许多,提示有warning.这也是后面在VS 中install报错的原因,缺少相关的文件。cmake是直接从源码下载相关的文件到本地,当文件的地址无法访问时,相关的文件便没有下载到本地,而是生成了一个**.cache**文件夹。该文件夹如图所示:未下载的文件位置该文件夹中生成的都是未下载成功的文件,需要我们手动来下载。下载的地址在哪呢?这时我们就要查找c原创 2020-06-13 16:21:31 · 763 阅读 · 1 评论 -
【C++学习笔记(二)】之 LNK1104 无法打开文件“python37_d.lib” 解决方法
安装PythonDebug版本安装Python,如果已经安装Python,需要修改Python的安装设置,将Debug版本一起安装进来。在卸载或更改程序,找到Python,右击更改,可以添加Debug版本。给VS OPENCV.sln 添加Python37_d.lib的路径Python37_d.lib在Python的安装路径的Libs文件夹中。设置opencv_python3的属性,右击选择属性将python37_d.lib所在文件夹的路径添加到库目录里面然后在附加依赖项中添加pyth原创 2020-06-13 16:11:07 · 3250 阅读 · 1 评论 -
OpenCV学习笔记(二十二)之亚像素级别角点检测
亚像素级别角点检测提高检测精度理论与现实的差别,实际情况下几乎所有的角点不会是一个准确的整数像素点。亚像素定位插值方法基于图像矩计算曲线拟合方法(高斯曲面,多项式,椭圆曲面)TermCriteria模板类先介绍一下TermCriteria模板类,这个类是作为迭代算法的终止条件的。这个类的变量需要3个参数,第一个是终止条件类型,第二个参数为迭代的最大次数,最后一个是特定的阈值。终止条件类型:cv::TerCriteria::MAX_ITER :迭代终止条件为达到最大迭代次数终原创 2020-06-10 22:01:29 · 1103 阅读 · 0 评论 -
OpenCV学习笔记(二十一)之自定义Harris角点检测器
自定义Harris角点检测器基于Harris角点检测首先通过计算矩阵M得到两个特征值,然后计算得到角点响应值设置阈值,通过阈值计算得到有效响应的角点位置API分析 cv::cornerEigenValsAndVecscv::cornerEigenValsAndVecs(InputArray src,OutputArray dst,int blockSize,int kSize,int borderType=BORDER_DEFAULT)下面是代码:/*****自定义Harri原创 2020-06-09 22:08:30 · 293 阅读 · 0 评论 -
OpenCV学习笔记(二十)之Shi-Tomasi角点检测
API cv::goodFeaturesToTrackcv::goodFeaturesToTrack(InputArray image,OutputArray corners, //角点的坐标值int maxCorners, //返回角点的最大数目,返回响应值最强的数目double qualityLevel, //最小可接受的向量值double minDistance, //两个角点之间的最小距离InputArray mask=noArray(),int原创 2020-06-09 20:50:59 · 309 阅读 · 0 评论 -
OpenCV学习笔记(十九)之Harris角点检测
Harris角点检测API cv::cornerHarriscv::cornerHarris(InputArray src, //灰度图像OutputArray dst, //响应输出,可能为小数int blockSize, //矩阵大小int ksize, //窗口大小double k, //计算角度响应时的参数大小,默认在0.04-0.06int borderType=BORDER_DEFAULT)下面是代码:/*****Harris角点检测*****/原创 2020-06-09 20:13:21 · 378 阅读 · 0 评论 -
OpenCV学习笔记(十八)之距离变换与分水岭算法实现图像分割
什么是图像分割?图像分割的目标是将图像中像素根据一定的规则分为若干个cluster集合,每个集合包含一类像素。根据算法分为监督学习方法和无监督学习方法 ,图像分割的多数算法都属于无监督学习方法。距离变换常见算法:不断膨胀/腐蚀基于倒角距离分水岭变换常见算法:基于浸泡理论API距离变换cv::distanceTransformcv::distanceTransform(InputArray src,OutputArray dst,OutputArray labels,i原创 2020-06-07 09:54:15 · 496 阅读 · 0 评论 -
OpenCV学习笔记(十七)之计算图像矩,图像中心,面积,弧长
图像矩几何矩中心矩中心归一矩图像中心计算矩APIcv::momentscv::moments(InputArray array, //输入数据bool binaryImage=false //是否为二值图像)轮廓面积APIcv::contourAreacv::contourArea(InputArray contour, //输入轮廓数据bool oriented, //默认false,返回绝对值)曲线弧长APIcv::arcLengthcv::原创 2020-06-06 10:52:59 · 1591 阅读 · 0 评论 -
OpenCV学习笔记(十六)之绘制包围轮廓的矩形和圆形
减少多边形轮廓点数APIcv::approxPolyDP(InputArray curve,OutputArray approxCurve,double epsilon,bool closed)绘制包围轮廓矩形APIcv::boundingRect(InputArray points)得到包围轮廓最小矩形的左上角点坐标和右下角点坐标,绘制一个矩形cv::minAreaRect(InputArray points)得到一个旋转的矩形,返回旋转矩形绘制包围轮廓的圆和椭圆API原创 2020-06-05 21:48:35 · 938 阅读 · 0 评论 -
OpenCV学习笔记(十五)之凸包
凸包在一个多边形的边缘和内部,任意两个点的连线都包含在边缘和内部。该多边形为凸包。API分析cv::convexHullcv::convexHull(InputArray points, //输入候选点,来自findContoursOutputArray hull, //凸包Bool clockwise, //顺时针方向Bool returnPoints, //true表示返回点个数,如果第二个参数是vector<Point>则自动忽略)代码思路:首先把图像原创 2020-06-03 23:31:38 · 307 阅读 · 0 评论 -
OpenCV学习笔记(十四)之查找轮廓
查找轮廓查找轮廓是在图像边缘提取的基础上,寻找对象的轮廓的方法。所以边缘提取的阈值选定会影响最终轮廓发现的结果。API分析cv::findContourscv::findCountours(InputArray binImg; //输入图像OutputArrayOfArrays contours, //发现的轮廓对象OutputArray hierarchy,//图像的拓扑结构int mode, //轮廓返回的模式int method, //发现的方法Point of原创 2020-06-03 21:55:56 · 527 阅读 · 1 评论 -
OpenCV学习笔记(十三)之模板匹配
模板匹配模板匹配就是在整个图像区域匹配到与给定子图像的小块区域模板匹配首先需要一个模板图像(子图像)待检测图像工作方法:在待检测图像上,从左到右,从上到下计算模板图像与待检测图像的匹配度。匹配算法计算平方不同(cv::TM_SQDIFF)归一化计算平方不同(cv::TM_SQDIFF_NORMED)计算相关性(cv::TM_CCORR)归一化计算相关性(cv::TM_CCORR_NORMED)计算相关系数(cv::CCOEFF)归一化计算相关系数(cv:::CCOEFF_NORM原创 2020-06-02 23:05:50 · 357 阅读 · 0 评论 -
OpenCV学习笔记(十二)之直方图比较
直方图比较方法对输入的两张图像计算得到直方图H1和H2,归一化到相同的尺度空间,然后通过计算H1和H2之间的距离得到两个直方图的相似程度。OpenCV提供的比较方法:Correlation - 相关性比较Chi-Square - 卡方比较Intersection - 十字交叉性Bhattacharyya - 巴氏距离相关性比较(HISTCOM_CORREL)卡方比较(HISTCOM_CHISQE)十字交叉性(HISTCOM_INTERSECT)巴氏距离(HISTCOM_BHAT原创 2020-06-02 22:00:41 · 358 阅读 · 0 评论 -
OpenCV学习笔记(十一)之直方图计算并画图显示
直方图对于图像梯度,每个像素的角度,等图像的属性都可以建立直方图。直方图的常见属性:dims-表示维度bins-表示维度中子区域大小划分,bins=256,表示划分为256个级别range-表示值的范围,灰度值范围为[0,255]cv::split ()把多通道图像分为多个单通道图像split( const Mat & src, //输入图像Mat* mvbegin //输出的通道图像数组)cv::calcHist()生成直方图数据calcHist(cons原创 2020-06-01 22:51:45 · 284 阅读 · 0 评论 -
OpenCV错误解决方法 像素指针越界
原因:访问像素数值时指针越界解决办法:检查指针下标是否正确row和col是否写反了原创 2020-06-01 21:07:22 · 719 阅读 · 0 评论 -
OpenCV学习笔记(十)之像素重映射
像素重映射把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上。cv::remap API分析cv::remap(InputArray src, //输入图像OutputArray dst, //输出图像InputArray map1,//x映射表 CV_32FC1/CV_32FC2InputArray map2,//y映射表Int interpolation, //插值方式Int borderMode, //边界模式Const Scalar borderValue //原创 2020-05-31 21:02:13 · 254 阅读 · 0 评论 -
OpenCV学习笔记(九)之霍夫圆检测
霍夫圆检测因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。基于效率考虑,OpenCV中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步:检测边缘,发现可能的圆心在第一步的基础上从候选圆心开始计算最佳半径大小。cv::HoughCircles()API分析cv::HoughCircles(InputArray image, //输入图像,必须是8位的单通道灰度图像OutputArray circles, //圆信息Int method, //方法Double dp,原创 2020-05-31 20:09:21 · 559 阅读 · 0 评论 -
OpenCV学习笔记(八)之霍夫直线变换
霍夫直线变换介绍Hough Line Transform用来做直线检测前提条件–边缘检测已经完成平面空间到极坐标空间转换在图像平面空间上的多个点映射到(r-θ)坐标空间中,形成多条曲线。多条曲线有共同的交点,即表明这几个点在图像平面空间中是共线的。标准的霍夫变换cv::HoughLines从平面坐标转换到霍夫空间,最终输出是(θ, r)表示极坐标空间。霍夫变换直线概率cv::HoughLinesP最终输出是直线的两个点(x0, y0, x1, y1)。API介绍cv::HoughLin原创 2020-05-30 22:59:15 · 506 阅读 · 0 评论 -
OpenCV学习笔记(七)之Canny边缘检测
Canny边缘检测Canny算法步骤:高斯模糊-GaussianBlur灰度转换-cvtColor计算梯度-Sobel/Scharr非最大信号抑制高低阈值输出二值图像高低阈值输出二值图像T1,T2为阈值,凡是高于T2的都保留,凡是低于T1的都丢弃,从高于T2的像素出发,凡是大于T1且相互连接的都保留。最终得到一个输出二值图像。推荐的高低阈值比值为T2:T1= 3:1/2:1,其中T2为高阈值,T1为低阈值。Canny API介绍:Canny(InputArray src, //原创 2020-05-30 20:59:21 · 392 阅读 · 0 评论 -
OpenCV学习笔记(六)之拉普拉斯算子
理论:最大变化处的二阶微分值为0,即边缘在二阶微分时为零值、通过二阶微分计算,可以计算图像二阶微分,提取边缘。处理流程:高斯模糊-去噪 GaussianBlur()转换为灰度图像 cvtColor()拉普拉斯-二阶导数计算 Laplacian()取绝对值 convertScaleAbs()下面是代码:#include<iostream>#include<opencv2/opencv.hpp>#include<string>using names原创 2020-05-29 21:07:14 · 591 阅读 · 0 评论 -
OpenCV学习笔记(五)之Sobel算子
卷积应用-图像边缘提取边缘是什么?边缘是像素值发生跃迁的位置,是图像的显著特征之一,在图像特征提取,对象检测,模式识别等方面都有重要的作用。如何提取边缘?对图像求一阶导数。一阶导数越大,说明像素在该方向的变化越大,边缘信号越强。Sobel算子离散微分算子,用来计算图像灰度的近似梯度。Sobel算子功能集合高斯平滑和微分求导又被称为一阶微分算子,求导算子,在水平和垂直两个方向上求导,得到图像X方向和Y方向的梯度图像。改进版的Scharr函数,算子如下:Sobel算子API:cv原创 2020-05-29 20:39:55 · 717 阅读 · 0 评论 -
OpenCV学习笔记(四)之图像边缘处理
图像边缘问题图像做卷积操作时,边缘像素无法处理到,原因在于边缘像素没有完全和kernel重叠。因此,当3 X 3滤波时,边缘有1个像素没有被处理,5 X 5时有2个像素没有被处理。处理边缘在卷积之前增加边缘像素,填充像素值。比如在3 X 3的kernel作用的图像上添加1个像素的边缘,这样就能确保图像的边缘被处理,在卷积处理之后再去掉这些添加的边缘。OpenCV中默认的边缘处理方式是: BORDER_DEFAULT,此外还有以下几种:BORDER_CONSTANT–用指定像素值填充边缘BORDE原创 2020-05-29 16:22:05 · 1110 阅读 · 0 评论 -
OpenCV学习笔记(三)之线性滤波
卷积概念卷积是图像处理中的一个操作,是kernel在图像的每个像素上的操作。kernel本质上是一个固定大小的矩阵数组,其中心点称为锚点(anchor point)。卷积如何工作?把kernel放到像素数组上,求锚点周覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。常见卷积算子Robert 算子左图是左斜45度方向的差异,右图是右斜45度方向的差异。2. Sobel 算子左图是水平方向的像素差异,右图是垂直方向的像素差异。3. 拉普拉斯算子自定义线性滤原创 2020-05-28 22:56:02 · 255 阅读 · 0 评论 -
OpenCV学习笔记(二)之图像阈值化
图像阈值(Threshold)阈值类型1. 阈值二值化(Threshold Binary)2. 阈值反二值化(Threshold Binary Inverted)3. 截断(Truncate)4. 阈值取零(Threshold To Zero)5. 阈值反取零(Threshold To Zero Inverted)下面是代码展示:/*****图像阈值化*****/#include<iostream>#include<opencv2/opencv.hpp>原创 2020-05-28 21:42:56 · 327 阅读 · 0 评论 -
OpenCV学习笔记(一)之图像金字塔-上采样与降采样与DOG
图像金字塔一个图像金字塔式一系列的图像组成,最底下的图形尺寸最大,最上方的图像尺寸最小。高斯金字塔是从底向上,逐层降采样得到的。高斯金字塔的生成过程分为两步:1.对当前层进行高斯模糊。2.删除当前层的偶数行与列。3.即可得到上一层的图像,这样上一层跟下一层相比,都只有它的1/4大小。上采样与降采样降采样之后的图像大小是原图像M X N 的 M/2 X N/2,就是对原图像删除偶数行与列,即得到降采样之后的上一层的图片。上采样(cv::pyrUp)-zoom in 放大降采样(cv::py原创 2020-05-28 20:28:25 · 535 阅读 · 0 评论