opencv学习(二十六)①控制台颜色设置//②Histgram直方图绘制CalcHist()//③找寻最值函数minMaxLoc()//④直方图比较compareHist()

本文介绍OpenCV中的控制台颜色设置、直方图绘制(包括二维、一维、三色直方图)及最值查找函数minMaxLoc()的应用,并通过实例详细讲解了直方图比较函数compareHist()的使用。
摘要由CSDN通过智能技术生成

一,控制台颜色设置

这里写图片描述

二,直方图绘制CalcHist()

这里写图片描述
这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述

找寻最值函数minMaxLoc()

这里写图片描述

实例1,H-S二维直方图绘制


//---------------------------------【头文件、命名空间包含部分】----------------------------
//      描述:包含程序所使用的头文件和命名空间
//------------------------------------------------------------------------------------------------
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;





//--------------------------------------【main( )函数】-----------------------------------------
//          描述:控制台应用程序的入口函数,我们的程序从这里开始执行
//-----------------------------------------------------------------------------------------------
int main()
{

    //【1】载入源图,转化为HSV颜色模型
    Mat srcImage, hsvImage;
    srcImage = imread("D://1.jpg");
    cvtColor(srcImage, hsvImage, COLOR_BGR2HSV);

    system("color 2F");


    //【2】参数准备
    //将色调量化为30个等级,将饱和度量化为32个等级
    int hueBinNum = 30;//色调的直方图直条数量
    int saturationBinNum = 32;//饱和度的直方图直条数量
    int histSize[] = { hueBinNum, saturationBinNum };
    // 定义色调的变化范围为0到179
    float hueRanges[] = { 0, 180 };//分割为30份
    //定义饱和度的变化范围为0(黑、白、灰)到255(纯光谱颜色)
    float saturationRanges[] = { 0, 256 };//分割为32份
    const float* ranges[] = { hueRanges, saturationRanges };
    MatND dstHist;
    //参数准备,calcHist函数中将计算第0通道和第1通道的直方图
    int channels[] = { 0, 1 };

    //【3】正式调用calcHist,进行直方图计算
    calcHist(&hsvImage,//输入的数组
        1, //数组个数为1
        channels,//通道索引
        Mat(), //不使用掩膜
        dstHist, //输出的目标直方图
        2, //需要计算的直方图的维度为2
        histSize, //存放每个维度的直方图尺寸的数组
        ranges,//每一维数值的取值范围数组
        true, // 指示直方图是否均匀的标识符,true表示均匀的直方图
        false);//累计标识符,false表示直方图在配置阶段会被清零

               //【4】为绘制直方图准备参数
    double maxValue = 0;//最大值
    minMaxLoc(dstHist, 0, &maxValue, 0, 0);//查找数组和子数组的全局最小值和最大值存入maxValue中(double型)
    int scale = 10;
    Mat histImg = Mat::zeros(saturationBinNum*scale, hueBinNum * 10, CV_8UC3);

    //【5】双层循环,进行直方图绘制
    for (<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值