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

本文介绍了一种使用OpenCV实现的图像匹配方法,通过将图像从BGR颜色空间转换到HSV颜色空间并提取H通道直方图,然后利用计算得到的直方图进行图像匹配,最终通过阈值化和形态学操作突出匹配区域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


测试图:

            


程序:

#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();
}

运行结果:



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值