• 大小: 38.31MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-06-30
  • 语言: 其他
  • 标签:

资源简介

基于opencv的直方图均衡只能处理8位的图像,但是有时候我们接受的高分辨率的图像不是8位,是16位或者更高的图像。 这个代码实现了基于16位单通道图像的直方图均衡。如果想换成32位的,可以在此段代码的基础上进行更改,只需要更改灰度变换的代码部分即可。

资源截图

代码片段和文件信息

#include
#include 
#include 
#include 


using namespace std;
using namespace cv;


void EqualizeHist(Mat&  Mat& intint);
void EqualizeHist_Map(Mat&Mat& intint);
void EqualizeHist_Array(Mat& Mat& intint);


int main() {

Mat src = imread(“D:/test/44.jpg“ 0);
//8位直方图均衡对比
Mat dst = src.clone();
Mat dst2 = src.clone();
Mat dst3 = src.clone();
Mat dst4 = src.clone();



clock_t start4 ends4;
start4 = clock();
equalizeHist(src dst4);
ends4 = clock();
cout << “opencv自带的接口:“ <<(double) (ends4 - start4) / CLOCKS_PER_SEC << “秒“ << endl;

clock_t start ends;
start = clock();
EqualizeHist(src dst2568);
ends = clock();
cout << “直方图均衡原理的6步实现:“<<(double)(ends - start) / CLOCKS_PER_SEC << “秒“ << endl;


clock_t start2 ends2;
start2 = clock();
EqualizeHist_Map(src dst2 256 8);
ends2 = clock();
cout <<“Map结构: “ <<(double)(ends2 - start2 )/ CLOCKS_PER_SEC << “秒“ <<““ << endl;


clock_t start3 ends3;
start3 = clock();
EqualizeHist_Array(src dst3 256 8);
ends3 = clock();
cout <<“Array优化:“<< (ends3 - start3) / (double)CLOCKS_PER_SEC << “秒“ << endl;


/*16位单通道直方图均衡
  将16位的直方图均衡化成8位的图进行显示
  将65536内的像素值归一化到256的像素值内
*/
//Mat dst5 = Mat(src.rowssrc.rowsCV_8UC1);
//EqualizeHist_Array(src dst6553616);



imshow(“原图“ src);
imshow(“自带“ dst4);
imshow(“6步“ dst);
imshow(“map“ dst2);
imshow(“数组“ dst3);


waitKey(0);
return 0;


}
// 数组直方图均衡化
void EqualizeHist(Mat& src Mat& dst int graylevel int dataBit)
{

//第1步:计算原始图像的像素总个数
int ss = src.cols * src.rows;
if (!src.data)
{
return;
}

//第2步:计算图像的直方图,即计算出每一取值范围内的像素值个数
int* mp = new int[graylevel];
memset(mp 0 sizeof(int) * graylevel);//初始化
for (size_t i = 0; i < src.rows; i++)
{
uchar* ptr = src.ptr(i);
for (size_t j = 0; j < src.cols; j++)
{
int value = ptr[j];
mp[value]++;
}
}


//第3步:计算灰度分布频率+灰度累加分布频率+重新计算均衡化后的灰度值,四舍五入
double* valuePro = new double[graylevel];
memset(valuePro 0 sizeof(double) * graylevel);//初始化  一定要记住
for (size_t i = 0; i < graylevel; i++)
{
valuePro[i] = ((double)mp[i] / ss);
}

//第四步:计算灰度累计分布频率
for (size_t i = 1; i < graylevel; i++)
{
valuePro[i] = valuePro[i - 1] + valuePro[i];
}

//第五步:重新计算均衡化后的灰度值,四舍五入。参考公式:(N-1)*T+0.5
for (size_t i = 0; i < graylevel; i++)
{
mp[i] = (uchar)(255 * valuePro[i] + 0.5);
}

//第6步:灰度变换
if (dataBit == 8)
{
for (size_t i = 0; i < src.rows; i++)
{
uchar* pSrc = src.ptr(i);
uchar* pDst = dst.ptr(i);
for (size_t j = 0; j < src.cols; j++)
{
pDst[j] = mp[pSrc[j]];
}
}
}
else if(dataBit==16){
//第四步:灰度变换
for (size_t i = 0; i < src.rows; i++)
{
unsigned short* pSrc = src.ptr(i);
uchar* pDst = dst.ptr(i);
for (size_t j = 0; j < src.cols; j++)
{
pDst[j] = mp[pSrc[j]];
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      44297  2020-09-10 16:49  直方图均衡(支持单通道16位和8位图像)\44.jpg

     文件     537005  2020-09-10 16:51  直方图均衡(支持单通道16位和8位图像)\8位直方图均衡.png

    ..A..H.     45568  2020-09-10 16:52  直方图均衡(支持单通道16位和8位图像)\Project1\.vs\Project1\v16\.suo

     文件   45010944  2020-09-10 16:52  直方图均衡(支持单通道16位和8位图像)\Project1\.vs\Project1\v16\Browse.VC.db

     文件  153681920  2020-09-10 15:45  直方图均衡(支持单通道16位和8位图像)\Project1\.vs\Project1\v16\ipch\AutoPCH\aa648e9605550ee5\源.ipch

     文件   32964608  2020-09-07 15:12  直方图均衡(支持单通道16位和8位图像)\Project1\.vs\Project1\v16\ipch\AutoPCH\d164b26aedc4c422\源.ipch

     文件        543  2020-09-10 15:54  直方图均衡(支持单通道16位和8位图像)\Project1\.vs\Project1\v16\TestStore\0\000.testlog

     文件         24  2020-09-07 16:56  直方图均衡(支持单通道16位和8位图像)\Project1\.vs\Project1\v16\TestStore\0\testlog.manifest

     文件       7215  2020-09-07 15:14  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\Project1.vcxproj

     文件        956  2020-09-07 15:14  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\Project1.vcxproj.filters

     文件        168  2020-09-07 15:11  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\Project1.vcxproj.user

     文件        732  2020-09-10 15:52  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\Project1.Build.CppClean.log

     文件       3043  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\Project1.log

     文件        644  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\Project1.tlog\CL.command.1.tlog

     文件      51762  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\Project1.tlog\CL.read.1.tlog

     文件        384  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\Project1.tlog\CL.write.1.tlog

     文件       1134  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\Project1.tlog\link.command.1.tlog

     文件       2640  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\Project1.tlog\link.read.1.tlog

     文件        376  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\Project1.tlog\link.write.1.tlog

     文件        151  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\Project1.tlog\Project1.lastbuildstate

     文件          0  2020-09-10 15:52  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\Project1.vcxproj.FileListAbsolute.txt

     文件     535552  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\vc142.idb

     文件    1953792  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\vc142.pdb

     文件     920538  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\x64\Debug\源.obj

     文件       6498  2020-09-10 16:52  直方图均衡(支持单通道16位和8位图像)\Project1\Project1\源.cpp

     文件       1445  2020-09-07 15:11  直方图均衡(支持单通道16位和8位图像)\Project1\Project1.sln

     文件     194560  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\x64\Debug\Project1.exe

     文件    3837512  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\x64\Debug\Project1.ilk

     文件    2084864  2020-09-10 16:48  直方图均衡(支持单通道16位和8位图像)\Project1\x64\Debug\Project1.pdb

     目录          0  2020-09-10 16:57  直方图均衡(支持单通道16位和8位图像)\Project1\.vs\Project1\v16\ipch\AutoPCH\aa648e9605550ee5

............此处省略19个文件信息

评论

共有 条评论

相关资源