欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

chapter22_2

程序员文章站 2022-03-23 08:31:41
...

chapter22_2

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);

chapter22_2

推荐阅读