chapter22_2
程序员文章站
2022-03-23 08:31:41
...
Mat src = imread("D://1.jpg", 0);
imshow("原图", src);
Mat dstHist1;
Mat dstHist2;
int dims = 1;
float hranges[] = { 0, 256 };
const float*ranges[] = { hranges };
int bins = 256;
int channels = 0;
calcHist(&src, 1, &channels, Mat(), dstHist1, dims, &bins, ranges);
int scale = 1;
Mat dstImg(bins*scale, bins * 1, CV_8UC3, Scalar(0));
double min;
double max;
minMaxLoc(dstHist1, &min, &max, 0, 0);
int hpt = saturate_cast<int>(0.9*bins);
for (int i = 0; i <bins; i++)
{
float binValue = dstHist1.at<float>(i);
int realVale = saturate_cast<int>(binValue / max*hpt);
line(dstImg, Point(i*scale, bins - 1), Point(i*scale, bins - 1 - realVale), Scalar(0, 255, 0));
}
imshow("原图直方图", dstImg);
Mat dst;
equalizeHist(src, dst);
imshow("均值化图像:", dst);
calcHist(&dst, 1, &channels, Mat(), dstHist2, dims, &bins, ranges);
Mat dstImg2(bins*scale, bins * 1, CV_8UC3, Scalar(0));
for (int i = 0; i <bins; i++)
{
float binValue = dstHist2.at<float>(i);
int realVale = saturate_cast<int>(binValue / max*hpt);
line(dstImg2, Point(i*scale, bins - 1), Point(i*scale, bins - 1 - realVale), Scalar(0, 255, 0));
}
imshow("均值化后直方图", dstImg2);
double matchValue0 = compareHist(dstHist1, dstHist2, CV_COMP_CORREL);
double matchValue1 = compareHist(dstHist1, dstHist2, CV_COMP_CHISQR);
double matchValue2 = compareHist(dstHist1, dstHist2, CV_COMP_INTERSECT);
double matchValue3 = compareHist(dstHist1, dstHist2, CV_COMP_BHATTACHARYYA);
cout <<"matchValue0:" <<matchValue0<<endl;
cout <<"matchValue1:" <<matchValue1<<endl;
cout <<"matchValue2:" <<matchValue2 <<endl;
cout <<"matchValue3:" <<matchValue3<<endl;
waitKey(0);
推荐阅读