随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

OpenCV实现图像反向投影

一、概述

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

  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.输出图像

二、代码示例

复制代码
 //[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);
复制代码

 

三、示例图片

 

 

 

posted on   飘杨......  阅读(214)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示