[OpenCV学习日记-java]-16-直方图反向投影

直方图的反向投影

对一个输入图像完成直方图分布可能性替换,从而找到图像中直方图分布相似或者相同的对象区域

他的Api函数如下

calcBackProject(List<Mat> images, MatOfInt channels, Mat hist, Mat dst, MatOfFloat ranges, double scale)
  • images:表示输入图像
  • channels:参与计算的图像的通道数据
  • hist:预先知道的直方图模型数据
  • dst:实处的直方图反向投影结果
  • ranges:图像像素对应通道的取值范围
  • scale:缩放 默认取1
HSV色彩空间

hsv色彩空间的取值范围
在这里插入图片描述

代码演示
//原图片
Mat src = Imgcodecs.imread("C:\\test\\tx.jpg",Imgcodecs.IMREAD_REDUCED_COLOR_2);
//模板图片
Mat simple = Imgcodecs.imread("C:\\test\\hand_simple.png");


//展示
HighGui.imshow("原图",src);
HighGui.imshow("模板图片",simple);


//把模板转换到hsv色彩空间
Mat hsv_temp = new Mat();
Imgproc.cvtColor(simple,hsv_temp, Imgproc.COLOR_BGR2HSV);

//计算模板的直方图
MatOfInt channels =new MatOfInt(0,1);//要计算的通道数,只需要计算H和S通道就行
MatOfInt hitsSize = new MatOfInt(30,32);//bin大小
MatOfFloat ranges = new MatOfFloat(0,179,0,255);//通道的取值范围
Mat hist_temp = new Mat();//输出的直方图
List<Mat> images = new ArrayList<>(Arrays.asList(hsv_temp));//创建要计算的图像
Imgproc.calcHist(images,channels,new Mat(),hist_temp,hitsSize,ranges);//计算直方图

//数据归一化区间[0,255]
Core.normalize(hist_temp,hist_temp,0,255,Core.NORM_MINMAX);

//反向投影
Mat src_hsv = new Mat();
Mat dst = new Mat();
Imgproc.cvtColor(src,src_hsv,Imgproc.COLOR_BGR2HSV);//将原图转换为HSV图像
Imgproc.calcBackProject(Arrays.asList(src_hsv),channels,hist_temp,dst,ranges,1);

HighGui.imshow("反向投影",dst);

在这里插入图片描述


上一篇[OpenCV学习日记-java]-15-图像直方图
下一篇[OpenCV学习日记-java]-17-模板匹配
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Timeless小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值