cvCalcBackProject() 直方图反向投影匹配

具体原理不太懂,就是在一张图转换为直方图在另一张图上进行匹配?


测试图:

            


程序:

#include <iostream>
#include <cv.h>
#include <highgui.h>
#include <opencv2/opencv.hpp>

using namespace std;

int main()
{
	IplImage *img_in = cvLoadImage("test01.jpg");
	IplImage *img_hsv = cvCloneImage(img_in);
	cvCvtColor(img_in,img_hsv,CV_BGR2HSV);//BGR转HSV

	IplImage *h_plane_src = cvCreateImage(cvGetSize(img_in),8,1);
	cvSplit(img_hsv,h_plane_src,NULL,NULL,NULL);//分离出H通道的单通道图像

	int dims = 1;
	int size[] = {256};
	float ranges_h[] ={0,255};
	float *ranges[] = {ranges_h};
	CvHistogram *hist_src = cvCreateHist(1,size,CV_HIST_ARRAY,ranges);
	cvCalcHist(&h_plane_src,hist_src);//计算直方图

	IplImage *dst = cvLoadImage("test02.jpg");
	IplImage *hsv_dst = cvCreateImage(cvGetSize(dst),8,3);
	cvCvtColor(dst,hsv_dst,CV_BGR2HSV);//BGR转HSV

	IplImage *h_plane_dst = cvCreateImage(cvGetSize(dst),8,1);
	cvSplit(hsv_dst,h_plane_dst,NULL,NULL,NULL);//分离出H通道的单通道图像

	IplImage *dst_probability = cvCreateImage(cvGetSize(h_plane_dst),IPL_DEPTH_8U,1);
	cvZero(dst_probability);

	cvCalcBackProject(&h_plane_dst,dst_probability,hist_src);//计算概率相似度
	cout<<cvSum(dst_probability).val[0]<<endl;//计算dst_probability各通道所有像素总和

	cvShowImage("result",dst_probability);
	cvThreshold(dst_probability,dst_probability,200,255,CV_THRESH_BINARY);//阈值化
	cvShowImage("dst1",dst_probability);

	IplConvKernel *kernel = cvCreateStructuringElementEx(15,15,7,7,CV_SHAPE_RECT);//定义核
	cvMorphologyEx(dst_probability,dst_probability,NULL,kernel,CV_MOP_OPEN);//形态学开运算
	cvShowImage("dst2",dst_probability);
	
	cvWaitKey();
	cvReleaseImage(&img_in);
	cvReleaseImage(&img_hsv);
	cvReleaseImage(&h_plane_src);
	cvReleaseImage(&dst);
	cvReleaseImage(&hsv_dst);
	cvReleaseImage(&h_plane_dst);
	cvReleaseHist(&hist_src);
	cvDestroyAllWindows();
}

运行结果:



最右面的白色区域就是匹配上后经过开运算的结果,还是与设想的比较接近的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值