计算并绘制单通道图像的直方图。在MATLAB中绘制直方图是一件非常简单的事情,可是到了C环境下,竟然变成了一个问题。各种实现方法都有,而且要自己动手重新编程。幸好有了OPENCV。下面的代码要求OPENCV4.0的支持,并在VC6中编译通过。
转自阿须数码
//
// 对单通道图像做直方图
//
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <ctype.h>
int main( int argc, char** argv )
{
IplImage *src = 0;
IplImage *histimg = 0;
CvHistogram *hist = 0;
int hdims = 50; // 划分HIST的个数,越高越精确
float hranges_arr[] = {0,255};
float* hranges = hranges_arr;
int bin_w;
float max_val;
int i;
if( argc != 2 || (src=cvLoadImage(argv[1], 0)) == NULL) // force to gray image
return -1;
cvNamedWindow( "Histogram", 1 );
hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1 ); // 计算直方图
histimg = cvCreateImage( cvSize(320,200), 8, 3 );
cvZero( histimg );
cvCalcHist( &src, hist, 0, 0 ); // 计算直方图
cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 ); // 只找最大值
cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 ); // 缩放 bin 到区间 [0,255]
cvZero( histimg );
bin_w = histimg->width / hdims; // hdims: 条的个数,则 bin_w 为条的宽度
// 画直方图
for( i = 0; i < hdims; i++ )
{
double val = ( cvGetReal1D(hist->bins,i)*histimg->height/255 );
CvScalar color = CV_RGB(255,255,0); //(hsv2rgb(i*180.f/hdims);
cvRectangle( histimg, cvPoint(i*bin_w,histimg->height),
cvPoint((i+1)*bin_w,(int)(histimg->height - val)),
color, 1, 8, 0 );
}
cvShowImage( "Histogram", histimg );
cvWaitKey(0);
cvDestroyWindow("Histogram");
cvReleaseImage( &src );
cvReleaseImage( &histimg );
cvReleaseHist ( &hist );
return 0;
}
分享到:
相关推荐
这是利用openCV画出图像直方图的C++程序源代码,在VC++ 6.0下面编译成功的。多谢试用!
基于密度概率累加的原理,进行直方图均衡化
用C++实现图像直方图的计算,自己编写的代码哦。
利用delphi,对图像进行处理,得到灰度直方图的源代码。
数字图像处理 灰度直方图 源代码 C++实现
matlab 图像直方图均衡(源代码)
数字图像处理课程,直方图均衡化C++代码的实现
直方图均衡(支持单通道16位和8位图像)直方图均衡(支持单通道16位和8位图像)直方图均衡(支持单通道16位和8位图像)直方图均衡(支持单通道16位和8位图像)直方图均衡(支持单通道16位和8位图像)直方图均衡...
该程序是关于显示一幅灰度图像的直方图程序,能对大家有好处
matlab 图像直方图(源代码)
本资源不含OpenCV,OpenCV只用来转灰度图(可以删掉相关代码)其余画直方图是自己写的函数。 实验任务 统计灰度图像的直方图 (1)以二进制方式读取一幅 bmp、jpeg 或 png 格式图像的数据,并判断其是否为灰度图像...
图像直方图MATLAB代码图像直方图MATLAB代码图像直方图MATLAB代码图像直方图MATLAB代码图像直方图MATLAB代码图像直方图MATLAB代码
这里给出了数字图像处理中BMP文件读写、直方图统计、傅立叶变换、直方图均衡、均值滤波、中值滤波等 一些基本操作的程序代码,供初学者设计图像处理程序参考。
一个基于c++和OpenCV的直方图均衡化源代码图像处理程序。供大家参考。
直方图均衡化C++代码
内含测试图片及打开的平台软件,及详实注明
用vc 实现的图像直方图,以及直方图调整演示程序!!!!!!!
VC编程实现图像直方图处理。具有方便快捷的效果,能直观的看出图像的直方图,可视化界面
基于opencv的直方图均衡只能处理8位的图像,但是有时候我们接受的高分辨率...这个代码实现了基于16位单通道图像的直方图均衡。如果想换成32位的,可以在此段代码的基础上进行更改,只需要更改灰度变换的代码部分即可。