概述 图像识别的一个核心问题是图像的特征提取,简单描述即为用一组简单的数据(数据描述量)来描述整个图像,这组数据月简单越有代表性越好。...良好的特征不受光线、噪点、几何形变的干扰,图像识别技术的发展中,不断有新的描述图像特征提出,而图像不变矩就是其中一个。...OpenCV中的矩主要包括以下几种:空间矩,中心矩和中心归一化矩。...---- 代码演示 新建一个项目opencv-0026,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法 ?...其中命令行里面显示每个轮廓的面积和周长,右边的画的轮廓里面还有每个轮廓的质心 ---- -END-
图像的重映射 图像重映射的意思简单的说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。 ?...为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的. 简单的说就是改变图片的位置(左,右,上,下,颠倒) 相关API介绍 cv::remap ?...代码演示 新建一个项目opencv-0019,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法 ? ?
原因:#pragma comment (lib,"xxx.lib")//默认和引用的CPP文件在一个文件夹中 解决方法1:将xxx.lib和调用pragma comment的源文件放在一个目录(注意是调用它的源文件
直方图比较 对输入的两个图像计算得到直方图H1和H2,归一化到相同的尺度空间,然后可以通过计算H1与H2之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度。...OpenCV 提供了四种比较方法: Correlation 相关性比较 Chi-Square 卡方比较 Intersection 十字交叉比较 Bhattacharyya...代码 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include ...hsv_base; Mat src_test1, hsv_test1; Mat src_test2, hsv_test2; Mat hsv_half_down; /// 装载三张背景环境不同的图像...直方图 MatND hist_base; MatND hist_half_down; MatND hist_test1; MatND hist_test2; /// 计算HSV图像的直方图
直方图概念 上一篇我们讲了直方图的均衡化,里面一些直方图的概念有了介绍。我们再来看了一个图 ?...上述直方图概念是基于图像像素值,其实是对图像梯度,每个像素的角度、等一切图像的属性值,我们都可以建立直方图。这个才是直方图的概念的真正意义,不过是基于图像像素灰度直方图是最常见的。...代码演示 新建一个项目opencv-0020,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法 ? ? 直方图计算的代码 ? ? ? ? ?...Mat(): 掩码( 0 表示忽略该像素), 如果未定义,则不使用掩码 r_hist: 储存直方图的矩阵 1: 直方图维数 histSize: 每个维度的bin数目 histRange: 每个维度的取值范围...: 归一化方法 (例中指定的方法将数值缩放到以上指定范围) -1: 指示归一化后的输出数组与输入数组同类型 Mat(): 可选的掩码 6.在直方图画布上画出直方图 ?
大家好,又见面了,我是你们的朋友全栈君。...本人在做人脸采集的时候遇到了要用c++ opencv保存图片的问题,下面是方法,代码是抠出来的,由于是项目所以全部代码就不放出来了 直接使用c++ opencv的接口函数使用方法。...cv::imwrite(path_filename,picture) path_filename:为保存图片的路径和图片名,picture为要保存到图片,下面是例子。...#include using namespace std; using namespace cv; cv::Mat frame1; cv::VideoCapture.../img/114.jpg”, frame1);//这里我用的是相对路径,读者可用绝对路径,路径用左斜线!!! //中间其他功能代码省略。
前言 以前的文章《C++ OpenCV视频操作之图像输出文字》介绍了OpenCV中的putText函数可以输出文字,但是这个函数只能输出英文,如果输入的是中文会变为乱码,今天我们就来实现OpenCV输出中文..._ #include #include #include using namespace cv; class putText...,配置参见《VS2017配置OpenCV通用属性》。...上图中的putText.h和putText.cpp就是上面的核心代码,接下来我们看一下main的代码。...main.cpp #include #include #include "putText.h" using namespace std;
关于OpenCV像素操作,我们在VS2017里面新建项目pixeldemo,然后导入配置好属性环境(配置属性环境看VS2017配置Opencv通用属性文章) 开始编码 在源文件里新建项起名为main ?...然后自己在上面引入iostream和opencv的头文件,写入main方法 ---- ? ---- 加载显示图片 要做像素的操作我们首先要加载一张图片进来并显示出来,所以我们先写加载的代码 ? ?...说明我们的图片加载成功了 ---- 灰度图 我们先把原来的加载的图片改为单通道的灰度图并显示出来,代码要写在cv::waitkey(0)上面. ? 显示出的效果 ?...最左边是原图,中间的修改后的灰度图,最后面是通过计算后取返的图。...写完后看看这次输出的图像效果 ? 可以看出单通道取反和三通道取反出来的效果是有点不太一样的。
模版匹配就是在整个图像区域发现与给定子图像匹配的小块区域 模版匹配必须要有一个模版图像T(给定的子图像),还需要一个待检测的图像S(源图像) 在待检测的图像上,从左到右,从上到下计算模版图像与重叠子图像的匹配度...Method //计算匹配程度的方法 ---- 关于匹配方法,使用不同的方法产生的结果的意义可能不太一样,有些返回的值越大表示匹配程度越好,而有些方法返回的值越小表示匹配程度越好 关于参数...CV_TM_SQDIFF_NORMED归一化平方差匹配法 CV_TM_CCORR_NORMED归一化相关匹配法 CV_TM_CCOEFF_NORMED归一化相关系数匹配法 代码演示 新建一个项目opencv...-0022,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法 ?...可以看到左边是我们的源图,中间的我们的要匹配的图,运行起来后直接就匹配到对应的图了 通过改变上面的算法类型,得到不同的效果 ? ? ---- -END-
轮廓发现(find contour) 轮廓即是以某种方式表示图像中的曲线的点的列表。这种表示可以根据实际的情形不同而不同。表示一条曲线的方式有很多种。...轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法。所以边缘提取的阈值选定会影响最终轮廓发现的结果。...OpenCV中,轮廓是由STL风格的vector模板对象表示的,其中vector中的每个元素都编码了曲线上,下一点的位置信息。 先上干货 Demo视频显示效果 ?...全部发现的轮廓图像,点的vectors的vector int contourIdx, // 需要绘制的轮廓的指数 (-1 表示 "all") const Scalar& color...Point offset = Point() // (可选) 所有点的偏移 ) 代码演示 新建一个项目opencv-0023,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入
卷积 就是叠加.卷积的重要的物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。 通俗的说: 在输入信号的每个位置,叠加一个单位响应,就得到了输出信号。...这正是单位响应是如此重要的原因。 卷积的应用 用一个模板和一幅图像进行卷积,对于图像上的一个点,让模板的原点和该点重合,然后模板上的点和图像上对应的点相乘,然后各点的积相加,就得到了该点的卷积值。...把一个点的像素值用它周围的点的像素值的加权平均代替。 卷积是一种线性运算,图像处理中常见的mask运算都是卷积,广泛应用于图像滤波。...OpenCV中自带了4种模糊算法: blur(均值模糊) GaussianBlur(高斯模糊) medianBlur(中值模糊) bilateralFilter(双边滤波) 新建项目 新建一个项目...opencv-0009,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.并加载我们常用的那个图片显示出来 ?
最近项目遇到一个问题,springboot2在打包过程中出现的问题; 1、引用本地的jar包,怎么打包到项目; pom.xml 配置 dependencies标签配置 org.opencv opencv</artifactId...使用人脸识别过程中,需要引入haarcascade_frontalface_alt2.xml文件,如果放在项目的lib文件中,在打包的过程中能够打到包里,但是在动态引用的过程中,由于jar包中文件的引用出现混乱路径的情况...找到一个折中的办法,haarcascade_frontalface_alt2.xml文件放到固定目录下,再引用的时候,只需要读取固定的路径即可。....*; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier
OpenCV基础函数 drawmarker就是画标记的函数,使用也非常简单,以前一般要图像上做标记可能直接就画的点,而drawmarker函数中,可多个不同的标记可以自己选择,用了它就可以在图像上做标记会更方便一些...,已经写了对应的说明,需要注意的一个就是markerType的参数,这里的参数有多个,如下: 参数值 参数名称 MarkerTypes::MARKER_CROSS 十字 MarkerTypes::MARKER_DIAMOND...新建一个opencvdrawmarker的项目,配置OpenCV的属性《VS2017配置OpenCV通用属性》 ?...main的代码 #include #include using namespace cv; using namespace std; int...drawMarker的函数就是这么的简单。 完
去雾原理原理是根据何凯明博士的《Single Image Haze Removal Using Dark Channel Prior》这篇文章,介绍见https://www.cnblogs.com/Imageshop...本文主要介绍C++实现,工程文件见:https://download.csdn.net/download/qq_34902877/12017480。...1、求暗通道 窗口的大小size,这个对结果来说是个关键的参数,窗口越大,其包含暗通道的概率越大,暗通道也就越黑,去雾的效果越不明显,一般窗口大小在11-51之间,即半径在5-25之间。...Mat DarkChannel(Mat srcImg, int size) { vector chanels; split(srcImg, chanels); //求RGB三通道中的最小像像素值...具有着明显的意义,其值越小,去雾效果越不明显 Mat TransmissionEstimate(Mat src, float outA[3], int size, float omega) { Mat
这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割。 为了从一副图像中提取出我们需要的部分,应该用图像中的每一个像素点的灰度值与选取的阈值进行比较,并作出相应的判断。...(注意:阈值的选取依赖于具体的问题。即:物体在不同的图像中有可能会有不同的灰度值。 一旦找到了需要分割的物体的像素点,我们可以对这些像素点设定一些特定的值来表示。...阈值化的类型: OpenCV中提供了阈值(threshold)函数: threshold 。 这个函数有5种阈值化类型,在接下来的章节中将会具体介绍。...---- 代码演示 新建一个项目opencv-0014,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.这次我们直接在第二个图片上加上一个TrackBar...二值化阈值 基本步骤是要先把图片改为单通首的图像,即是灰度图,如果是彩色的三通道图二值化会有问题,然后把灰图的图像再进行二值化处理即可. 我们写一下TrackBarEvent的事件 ?
前言 我们在拍摄图片的时候无法保证图片是正下方垂直拍摄的,所以在获取图像的时候会防止我们提取正确的图像,这里我们就需要用到了透视变换。今天我们在试一下OpenCV中的透视变换。 实现效果 ?...dst 输出图像的相应的四边形顶点坐标。 map_matrix 指向3×3输出矩阵的指针。...代码演示 我们再新建一个项目名为opencv--toushi,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法. ?...---- 定义透视变换的坐标 ? 上面的src_corners的点的定义是根据我们的原图上自己设置的点,后面我们会找一个机会来用程序获取这些点。...dst_corners是我们要通过矩阵变化后生成的点。 定义4个点的顺序应该是顺时针的方向获取的,如下图 ? ---- 获取透视变换矩阵并显示最后图像 ? ---- 最后生成的效果 ?
人们把照片的亮度分为0到255共256个数值,数值越大,代表的亮度越高。其中0代表纯黑色的最暗区域,255表示最亮的纯白色,而中间的数字就是不同亮度的灰色。...如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。...直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。 ?...通过上一篇《C++ OpenCV图像的重映射》我们用到了remap这个函数,可以将图像灰度分布从一个分布映射到另一个分布,然后再得到映射后的像素值即可。 ?...代码演示 新建一个项目opencv-0020,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法 ? ? 直方图均衡化 代码非常简单 ?
图像线性混合的数学原理 G(x)=(1-a)F(x)+aQ(x) 注意事项: 1,a的取值范围为0到1之间 2,F(x)和Q(x)为参与混合的两幅图像,G(x)表示输出图像 3,通过对两幅图像的每个像素值做线性加权得到最终的输出图像...addWeighted函数 在OpenCV中用于线性混合操作的API为addWeighted函数 void addWeighted(InputArray src1, double alpha, InputArray...代码演示 新建项目 新建一个项目opencv-0006,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法. ?...OK,显示图片没有问题。...中间的图像就是我们通过线性混合操作生成的图片,接下来我们改一下权重,看看显示的效果. ? 将第一个图像的权重改为0.2,显示的效果为 ? 明显可以看出第二张图显示的比较清晰.
凸包 凸包指如果在集合A内连接任意两个点的直线段都在A的内部,则称集合A是凸形的。简单点理解,就是一个多边型,没有凹的地方。...相关API OpenCV中提供了函数convexHull()用于对物体轮廓凸包进行检测,对形状的凸包缺陷分析时使用 void convexHull( InputArray points, OutputArray...类型要么为整型向量,要么为点集向量,如果是整型向量,那么存储的只是索引,索引的对象是输入二维点集(如果不懂这句话的意思,看一遍下面给出的源码就清楚了)。 clockwise:凸包方向的标志位。...表示返回点个数,如果第二个参数是vector则自动忽略 代码演示 实现步骤 图像从RGB转换为灰度图 灰度图转为二值图像 通过发现轮廓得到候选点 凸包API调 用 绘制显示 新建一个项目opencv...-0024,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法 ?
前言 《C++ OpenCV Contrib模块LBF人脸特征点检测》文章中已经介绍了人脸特征点的检测,本篇文章是在原代码的基础上实现人脸的提取。 ? 实现效果 ?...上图中介绍了人脸特征点的几个关键位置: 位置 点的范围 左侧下巴轮廓 0-7 下巴 8 右侧下巴轮廓 9-16 左侧眉毛 17-21 右侧眉毛 22-26 鼻梁区域 27-30 鼻底区域 31-35...两个需要注意的点: 人脸关键点检测出来的数据是vector>,而做凸包检测的时候需要将vector>转换成vector<vector<Point...做区域掩膜时先生成一张相同大小的全黑的图片,然后把要截取的区域全部填充为白色,再通过copyto的方式生成即可。...结语 源码下一篇会再提交上去,现在的源码在处理人脸的Delaunay三角形的 提取,正好遇到了问题。等下篇的时候一起说一下。 完
领取专属 10元无门槛券
手把手带您无忧上云