各种网站底部图标代码,营销型网站免费企业网站模版,音乐网站的建设,阿里云服务器win系统建站教程1.图像直方图
1.1.像素统计
计算图像均值#xff1a; Scalar cv::mean(InputArray src,InputArray masknoArray()); src#xff1a;输入图像mask#xff1a;掩膜层过滤
返回值是对输入图像通道数计算均值后的Scalar对象
计算图像均值与方差#xff1a; void cv::meanSt…1.图像直方图
1.1.像素统计
计算图像均值 Scalar cv::mean(InputArray src,InputArray masknoArray()); src输入图像mask掩膜层过滤
返回值是对输入图像通道数计算均值后的Scalar对象
计算图像均值与方差 void cv::meanStdDev(InputArray src,OutputArray mean,OutputArray stddev,InputArray masknoArray()); src输入图像mean输出图像通道的均值stddev输出图像通道的方差mask掩膜层
查找最大值和最小值及其位置 double cv::minMaxLoc(InputArray src, OutputArray minVal, OutputArray maxVal, OutputArray minLoc, OutputArray maxLoc, InputArray mask noArray()); src输入图像或矩阵可以是单通道、多通道或彩色图像。minVal输出参数指向一个double类型的指针用于存储计算得到的最小值。maxVal输出参数指向一个double类型的指针用于存储计算得到的最大值。如果不提供此参数则默认为0。minLoc输出参数指向一个Point类型的指针用于存储计算得到的最小值的位置。如果不提供此参数则默认为0。maxLoc输出参数指向一个Point类型的指针用于存储计算得到的最大值的位置。如果不提供此参数则默认为0。mask可选参数输入图像或矩阵用于指定感兴趣区域。只有位于mask内的像素才会被计算最小值和最大值。如果不提供此参数则默认为noArray()。
1.2.直方图计算和绘制
void calcHist(const Mat* images, //输入的数组或数据集int nimages, //输入数组的个数const int* channels, //需要统计的通道dim索引 InputArray mask, //可选的操作掩码用于标记出统计直方图的数组元素数据OutputArray hist, //输出的目标直方图 int dims, //需要计算的直方图的维数const int* histSize, //存放每个直方图尺寸的数组const float** ranges, //每一维数值的取值范围bool uniform true, //指示直方图是否均匀的标识符bool accumulate false //累计标识符主要是允许多从多个阵列中计算单个直方图,或者用于在特定的时间更新直方图。
) 第一个参数const Mat* 类型的 iamges输入的数组或数据集它们需为相同的深度CV_8U 或 CV_32F和相同的尺寸。第二个参数int 类型的 nimages输入数组的个数也就是第一个参数中存放了多少张 “图像”有几个原数组。第三个参数const int* 类型的 channels需要统计的通道dim索引。第一个数组通道从 0 到 images[0].channels() - 1而第二个数组通道从 images[0].channels() 计算到 images[0].channels() images[1].channels() - 1。第四个参数InputArray 类型的 mask可选的操作掩码。如果此掩码不为空那么它必须为 8 位并且与 images[i] 有同样的大小和尺寸。这里的非零掩码元素用于标记出统计直方图的数组元素数据。第五个参数OutputArray 类型的 hist输出的目标直方图一个二维数组。第六个参数int 类型的 dims需要计算的直方图的维数必须是正数且不大于 CV_MAX_DIMS在 OpenCV3 中等于 32。第七个参数const int* 类型的 histSize存放每个维度的直方图尺寸的数组。第八个参数const float** 类型的 ranges表示每一个维度数组第六个参数 dims的每一维的边界阵列可以理解为每一维数值的取值范围。第九个参数bool 类型的 uniform指示直方图是否均匀的标识符有默认值 true。第十个参数bool 类型的 accumulate累计标识符有默认值 false。若其为 true直方图在配置阶段不会被清零。此功能主要是允许多从多个阵列中计算单个直方图或者用于在特定的时间更新直方图。
绘制H-S直方图
#includeopencv2/opencv.hpp
#includetime.h
#includeiostreamusing namespace std;
using namespace cv;int main() {system(color 2F);//载入原图转化为 HSV 颜色模型Mat srcImage, hsvImage;srcImage imread(1.jpg);cvtColor(srcImage, hsvImage, COLOR_BGR2HSV);//将色调量化为 30 个等级将饱和度量化为 32 个等级int hueBinNum 30; //色调的直方图直条数量int saturationBinNum 32; //饱和度的直方图直条数量int histSize[] { hueBinNum,saturationBinNum };//定义色调的变化范围为 0 到 179float hueRanges[] { 0,180 };//定义饱和度的变化范围为 0黑、白、灰到 255纯光谱颜色float saturationRanges[] { 0,256 };const float* ranges[] { hueRanges,saturationRanges };MatND dstHist; //Mat 一般指二维矩阵MatND 指多维矩阵 2 )//calcHist 函数中将计算第 0 通道和第 1 通道的直方图int channels[] { 0,1 };//正式调用 calcHist 进行直方图计算calcHist(hsvImage, //输入的数组1, //数组个数为 1channels, //通道索引Mat(), //不使用掩膜dstHist, //输出的目标直方图2, //需要计算的直方图的维度为 2histSize, //存放每个维度的直方图尺寸的数组ranges, //每一维数值的取值范围数组true, //指示直方图是否均匀的标识符true 表示均匀的直方图false //累计标识符false 表示直方图在配置阶段会被清零);//为绘制直方图准备参数double maxValue 0; //最大值//查找数组和子数组的全局最小值和最大值存入 maxValue 中minMaxLoc(dstHist, 0, maxValue, 0, 0); int scale 10; //直方图放大倍数Mat histImage Mat::zeros(saturationBinNum * scale, hueBinNum * 10, CV_8UC3);//双重循环实现直方图绘制for (int hue 0; hue hueBinNum; hue) {for (int saturation 0; saturation saturationBinNum; saturation) {//直方图直条的值float binValue dstHist.atfloat(hue, saturation);int intensity cvRound(binValue * 255 / maxValue); //强度//正式进行绘制rectangle(histImage,Point(hue * scale, saturation * scale),Point((hue 1) * scale - 1, (saturation 1) * scale - 1),Scalar::all(intensity),FILLED);}}imshow(素材图, srcImage);imshow(H-S 直方图, histImage);waitKey(0);return 0;
}
绘制一维直方图
#includeopencv2/opencv.hpp
#includetime.h
#includeiostreamusing namespace std;
using namespace cv;int main() {system(color 2F);Mat srcImage imread(1.jpg, 0);imshow(原图, srcImage);if (!srcImage.data) {printf(图像读取失败!);return 0;}MatND dstHist;int dims 1;float hranges[] { 0,255 };const float *ranges[] { hranges }; //这里需为 const 类型 int size 256;int channels 0;//计算图像的直方图calcHist(srcImage, 1, channels, Mat(), dstHist, dims, size, ranges);int scale 1;Mat dstImage(size * scale, size, CV_8U, Scalar(0));//获取最大值和最小值double minValue 0;double maxValue 0;minMaxLoc(dstHist, minValue, maxValue, 0, 0);//绘制出直方图int hpt saturate_castint(0.9 * size);for (int i 0; i 256; i) {float binValue dstHist.atfloat(i); //注意 hist 中是 float 类型int realValue saturate_castint(binValue * hpt / maxValue);rectangle(dstImage, Point(i * scale, size - 1), Point((i 1) * scale - 1, size - realValue), Scalar(255)); }imshow(一维直方图, dstImage);waitKey(0);return 0;
}
1.3.直方图均衡化 void cv::equalizeHist( InputArray src,//输入图像 OutputArray dst//输出图像 ) 1.4.直方图比较 double cv::campareHist( InputArray H1, InputArray H2, int method ) H1和H2是两个直方图数据method表示衡量直方图数据相似性的计算方法。
HISTCMP_CORREL相关性相似比较HISTCMP_CHISQP卡方相似比较HISTCMP_INTERSECT交叉相似比较HISTCMP_BHATTACHARYYA巴氏距离相似比较HISTCMP_HELLINGER海林格距离相似比较与巴氏距离相似比较相同HISTCMP_CHISQR_ALT可变卡方相似比较HISTCMP_KL_DIV基于KL散度相似比较
对相关性相似比较与交叉相似比较方法来说直方图数据相似度越低值就越低而对卡方相似比较与巴氏距离相似比较方法来说直方图数据相似度越低值就越高其中巴氏距离相似比较方法的取值范围是[0,1]0表示完全相同1表示完全
1.5.直方图反向投影
void cv::calcBackProject(const Mat *images, //输入图像int nimages, //输入图像数量const int *channels, //不同图像的索引通道编号从0开始InputArray hist, //输入的模板直方图数据OutputArray backProject, //反向投影后的输出const float **ranges, //通道的取值范围double scale1, //输出数据的缩放1表示保持原值bool uniformtrue //表示一致性对边界数据的处理方式取值为false表示不处理
)
2.图像平滑操作
2.1.均值滤波
void blur( InputArray src, OutputArray dst,Size ksize, Point anchor Point(-1,-1),int borderType BORDER_DEFAULT
);参数说明
参数1被处理的图像
参数2均值滤波处理之后的图像
参数3滤波核大小其格式为高度宽度建议使用3,35,57,7等 宽、高相等的奇数边长。滤波核越大处理之后的图像越模糊
参数4滤波核的锚点建议采用默认值可以自动计算锚点
参数5边界样式建议采用默认值
2.2.高斯滤波
void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY 0,int borderType BORDER_DEFAULT
);参数说明
参数1待处理的图像
参数2高斯滤波处理之后的图像
参数3滤波核的大小宽高必须是奇数与均值滤波相同
参数4卷积核水平方向的标准差建议填0会根据滤波核的大小自动计算合适的权重比例
参数5卷积核垂直方向的标准差建议填0会根据滤波核的大小自动计算合适的权重比例
参数6边界样式建议使用默认值
2.3.中值滤波
void medianBlur( InputArray src, OutputArray dst, int ksize );参数说明
参数1待处理的图像
参数2中值滤波处理后的图像
参数3滤波核大小其值表示边长必须是大于1的奇数 3,5,7等
2.4.双边滤波
void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType BORDER_DEFAULT
);参数说明
参数1待处理的图像
参数2双边滤波处理后的图像
参数3以当前像素为中心的整个滤波区域的直径。如果d0则自动根据sigmaSpace参数 计算得到。该值与保留的边缘信息数量成正比与方法运行效率成反比
参数4参与计算的颜色范围这个值是像素颜色值与周围颜色值的最大差值只有颜色值 之差小于这个值时周围的像素才进行滤波计算。值为255时表示所有颜色都参与计算
参数5坐标空间的σ(sigma)值该值越大参与计算的像素数量就越多
参数6边界样式建议默认值