Opencv+C++图像处理的问题

有没有人会直方图的计算呀,本人毕设,真的学不会了,就是直方图的比较,两张图对比,出结果,结果接近0则二者相关性强

模板匹配?

你确定你可以用直方图来计算相关性?
直方图计算可以看下cv::calcHist()这函数,之后就是两张图片两个256长度的数组的比对,具体的比较方法需要按照你的方法进行比较,比如相同下标数值不一样算一次差异等等。

使用 cv::calcHist()进行直方图计算,cv::compareHist() 计算直方图相似度。
比如可以参考 https://blog.csdn.net/Tommy_wxie/article/details/74931934。https://blog.csdn.net/shuiyixin/article/details/80257822。

opencvC++中图像直方图计算及直方图比较

直方图计算

vector<Mat> getimhist(Mat im)
vector<Mat> ims;
split(im, ims);
const int binnum[1] = {256};
float valuerange[2] = { 0,255 };
const float* hrange[1] = { valuerange };
vector<Mat> imhist;
int chnum=ims.size();
for(int i= 0; i <chnum; i++)
{
Mat hist;
calcHist(&ims[i],1,0, Mat(), hist, 1,binnum,hrange);
normalize(hist, hist, 1 ,0, NORM_ L2, -1);
imhist.push_ back(hist);
return imhist;
}

直方图比较

Mat vectmat2mat(vector<Mat> ims)
Mat bigim=ims[0];
for (inti= 1;i <ims.size(); i++)
{
bigim.push_ back(ims[);
return bigim;
}
float get2imhistsim(Mat im1 ,Mat im2)
{vector<Mat> imhist1=getimhist(im1);
vector<Mat> imhist2=getimhist(im2);
Mat hist1 =vectmat2mat(imhist1);
Mat hist2=vectmat2mat(imhist2);
float histsim = compareHist(hist1, hist2, 0);
return histsim;
}