首页 > 其他 > 详细

直方图操作

时间:2017-02-28 00:51:24      阅读:170      评论:0      收藏:0      [点我收藏+]

示例程序:

#include <opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
	Mat src, dst;
	//load img;
	src = imread("001.jpg",1);
	if (!src.data)
	{
		printf("error");
		return -1;
		
	}
	imshow("1", src);
	//分成三个通道
	vector<Mat> rgb_planes; // 保存在stl容器里
	split(src, rgb_planes);
	// 设置直方图尺寸 
	int histSize = 255;
	
	Mat histImage(400, 400, CV_8UC1, Scalar(0));
	int bin_w = cvRound((double)400 / histSize);
	//设置范围
	float range[] = { 0, 255 };
	const float * histRange = { range };
	bool uniform = true; bool accumulate = false;
	Mat r_hist, g_hist, b_hist; // 用于保存三个通道的直方图
	//计算直方图
	calcHist(&rgb_planes[1], 1,0,Mat(),r_hist,1, &histSize, &histRange, uniform, accumulate);
	normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());  // 直方图归一化
	for (int i = 1; i < histSize; i++)
	{
		line(histImage, Point(bin_w * (i - 1), 400 - cvRound(r_hist.at<float>(i - 1))), Point(bin_w * (i), 400 - cvRound(r_hist.at<float>(i))), Scalar(255), 1, 8, 0);
	}
	imshow("dst", histImage);
	waitKey(0);
	
	return 0;
}

  

直方图操作

原文:http://www.cnblogs.com/whlook/p/6476948.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!