opencv学习笔记-直方图和均衡化


#include <opencv2\opencv.hpp>//灰度直方图

using namespace cv;
using namespace std;

int main()
{
	Mat srcImage = imread("1.jpg", 0);
	MatND Hist; //用于存储直方图
	float hranges[] = { 0, 255 };//统计的范围
	const float* ranges[] = { hranges };
	int channels = 0;//用于统计的通道
	int size = 256;
	if (!srcImage.data)
		cout << "Error!" << endl;
	cout << srcImage.channels() << endl;
	calcHist(&srcImage, 1, &channels, Mat(), Hist, 1, &size, ranges);//计算直方图
	Mat dstImage (size, size, CV_8U, Scalar(0));

	double maxValue;
	minMaxLoc(Hist, 0, &maxValue, 0, 0);
	cout << maxValue;

	for (int i = 0; i < 256; i++)
	{
		float Value = Hist.at<float>(i);
		int binValue = Value*size / maxValue;
		rectangle(dstImage, Point(i, size - 1), Point(i, size - binValue), Scalar(255));
	}

	imshow("1", dstImage);

	waitKey();
	return 0;
}<pre class="cpp" name="code">#include <opencv2\opencv.hpp>//直方图均衡化

using namespace cv;
using namespace std;

int main()
{
	Mat srcImage;
	Mat dstImage;
	srcImage = imread("1.jpg");
	if (!srcImage.data)
	{
		cout << "Error!" << endl;
		return -1;
	}

	cvtColor(srcImage, srcImage, COLOR_BGR2GRAY);
	imshow("first", srcImage);

	equalizeHist(srcImage, dstImage);
	imshow("finally", dstImage);

	waitKey();
	return 0;
}

 


openc学习笔记-直方图相关

记录一些学习数字图像处理的笔记,参考了<<opencv3编程入门>>,<<数字图像处理的matlab实现>>2本书,理论数学部分用matlab学习,但大部分内容还是会写代码,matlab对于理解图像处理的数学内容还是很有用的。

数字直方图画出了每个亮度的像素数,亮度可以是1-255(对于uint8图像来说),也就可以是(0-20)(21-41)...这取决与你怎样分割亮度范围。下面用matlab画出了一幅灰度图像的直方图可以看到该图像的像素主要集中在亮度100内,整体看上去就会暗一点。下面是原图。最上面是用opencv写的代码,对灰度图像画出了直方图:opencv画直方图只需要用calcHist()函数和rectangle()函数就行。读者自行找帮助文档,这里就不说了。

对于直方图均衡化,可以使灰度图像的动态范围变大,对比度加强,下面用matlab给出了第一个直方图均衡化后的效果可以看到,图像对比度加强,视觉上看的更加清晰。下面是均衡化后的直方图分布。可以看到各个灰度值的像素分布更加广,对比度加强。上面贴出了opencv一个简单的均衡化代码,主要来自于《opencv3编程入门》一书。当然对于有些图像,均衡化并不一定能够改善对比度,如果一幅图像直方图在0级亮度区域像素过于集中,那么均衡化后像素会在亮区域集中,并不能达到效果。这时候就需要给直方图规定一个形状,称之为直方图的规定化,在opencv中我还没实现,不过matlab可以很简单实现,有兴趣的可以找找冈萨雷斯图像处理的M函数源码,自己试试。关于直方图相关的数(蛋)学(疼)知识就不解释了,书和网上都有很多。第一次写博客,有写的不对地方谢谢指正。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值