OpenCV实现图像反向投影

1、概述

  概念:反向投影是反应直方图模型在目标图像中的分布情况。简单点来说就是用直方图模型去目标图像中寻找是否有相似的对象。

  ps:所以这里需要有两个输入:1.模型图片 。2.场景图片 ,即利用模型图片直方图去场景图片中搜索。 

calcBackProject(
const Mat* images,//const Mat类型的images,输入的数组(或数组集),它们需为相同的深度(CV_8U或CV_32F)和相同的尺寸,而通道数可以任意
int nimages,//int类型的nimages,输入数组的个数,也就是第一个参数中存放了多少张图像,有几个源数组
const int* channels,//const int类型的channels,需要统计的通道索引。第一个数组通道从0到image[0].channels-1,第二个数组通道从images[0].channes()计算到images[0].channels()+images[1].channels()-1
InputArray hist,//InputArray类型的hist,输入的直方图
OutputArray backProject,//OutputArray类型的backProject,目标反向投影阵列,其须为单通道,并且和image[0]有相同的大小和深度
const float** ranges,//const float**类型的ranges,表示每一个维度数组(第六个参数dims)的每一维边界阵列,可以理解为每一维数值的取值范围
double scale=1,//double scale,有默认值1,输出的方向投影可选的缩放因子,默认值为1
bool uniform=true//boo类型的uniform,指示直方图是否均匀的标识符,有默认值true
);

  操作步骤:

      1.载入模型图及场景图

      2.将模型图和场景图转换为HSV色彩空间

      3.计算模型图直方图

      4.模型直方图归一化

      5.执行反向投影

      6.输出图像

2、代码示例

 //[1]载入模型图片及场景图片
    Mat src = imread(filePath);
    Mat  src_roi=imread("C:\\Users\\wei.yang\\Downloads\\opencv_res\\highway_hue.jpg");
    if(src.empty()){
        return;
    }
    imshow("src",src);
    //[2]将模型图片和场景图片转换为HSV色彩空间
    Mat src_hsv,src_hsv_roi;
    cvtColor(src, src_hsv, COLOR_BGR2HSV);
    cvtColor(src_roi, src_hsv_roi, COLOR_BGR2HSV);
    //【3】计算模型图直方图
    MatND roiHist; //直方图对象
    int dims = 2;  //特征数目(直方图维度)
    float hranges[] = { 0,180 }; //特征空间的取值范围
    float Sranges[] = { 0,256 };
    const float *ranges[] = { hranges,Sranges };
    int size[] = { 20,32 };  //存放每个维度的直方图的尺寸的数组
    int channels[] = {0,1};  //通道数
    calcHist(&src_hsv_roi,1, channels, Mat(), roiHist, dims, size, ranges);
    //【4】直方图归一化
    normalize(roiHist, roiHist, 0, 255, NORM_MINMAX);

    //【5】反向投影
    Mat proImage; //投影输出图像
    calcBackProject(&src_hsv, 1, channels, roiHist, proImage, ranges);
    imshow("proImage",proImage);

3、示例图片

 

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值