查表法中的表是一个一维,256的数组,其意思在于对于一个像素点的灰度值进行变换,即如果原像素的灰度值为i,则查表转化后假设负片效果,就是灰度值为255-i。
在画出直方图后,想均衡化,增强对比度的话,可以这样,检测直方图中非零项的最低和最高,将最低设置成0,最高设置成255,其中间则按这种规律转化。
以下为代码:
// opencv_2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <opencv245.h>
using namespace cv;
using namespace std;
class Histogram1D
{
private:
int histsize[1];
float hranges[2];
const float* ranges[1];
int channels[1];
public:
Histogram1D()
{
histsize[0] = 256 ;
hranges[0] = 0.0;
hranges[1] = 255.0;
ranges[0] = hranges;
channels[0] = 0;
}
Mat getHistogram(const Mat &image);
Mat getHistogramImage(const Mat &image);
Mat applyLookUp(const Mat &image);
Mat stretch(const Mat &image, int minValue);
};
Mat Histogram1D::getHistogram(const Mat &image)
{
Mat hist;
calcHist(&image, 1, chan