`
saybody
  • 浏览: 904252 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

单通道图像的直方图(C/C++源代码)

阅读更多

计算并绘制单通道图像的直方图。在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直方图均衡化的源代码

    综上所述,这段代码展示了如何使用OpenCV在C/C++环境中进行图像的直方图均衡化处理,涵盖了图像处理的基本流程和一些核心函数的使用。通过这些操作,可以有效地提高图像的对比度,提升图像质量,使得图像中隐藏的...

    直方图均衡化原理及源代码

    ### 直方图均衡化原理及C++源代码实现 #### 一、直方图均衡化概述 **直方图均衡化**是一种经典的图像增强技术,其核心思想是通过重新分配图像像素值来改善图像的对比度。这种方法适用于增强整体亮度较暗或对比度较...

    图像去雾算法源代码c++

    总的来说,"图像去雾算法源代码c++"涉及到的要点包括:大气散射模型的理解,OpenCV库的应用,图像增强技术,颜色校正方法,特别是暗通道先验算法的实现,以及可能的用户界面设计和文件处理。这些知识需要扎实的...

    C++多种图像变换源代码

    1. **灰度值变换**:在彩色图像处理中,将RGB三通道图像转换为单通道灰度图像是一种常见的操作。灰度图像的每个像素由一个值表示,这个值反映了原图像对应位置的亮度。常见的灰度转换方法有直方图均衡化、线性映射等...

    C++OpenCV3源代码一维直方图的绘制

    该函数可以计算单通道或多通道图像的直方图。具体参数包括输入图像、通道数、掩码(可选)、直方图大小、范围等。例如: ```cpp cv::Mat hist; int histSize = 256; float range[] = { 0, 256 }; const float* ...

    VC++直方图均衡化显示图像及直方图

    在给定的标题“VC++直方图均衡化显示图像及直方图”中,我们可以了解到这是一个使用Visual C++(VC++)编程环境,并结合OpenCV库实现的图像处理项目。OpenCV是一个强大的计算机视觉库,它提供了丰富的函数来处理图像...

    彩色直方图反向投影_opencv_

    在"直方图反向投影.cpp"文件中,可能包含了实现这些步骤的C++代码。OpenCV库提供了函数如`cv::calcHist`用于计算直方图,`cv::compareHist`用于比较和反向投影,以及`cv::threshold`进行二值化操作。`cloud.jpg`可能...

    C++进行图像预处理代码

    灰度转换将彩色图像转化为单通道图像,简化处理;二值化将图像转化为黑白两色,便于对象分割。 提到“窗口分割”技术,这是图像处理中的一种策略,它将大图像分割成多个小窗口,然后对每个窗口独立进行处理。这样做...

    直方图均衡化源码

    在这个“直方图均衡化源码”中,我们很可能是看到用OpenCV 1.0库编写的C++源代码实现。 OpenCV(开源计算机视觉库)是一个强大的跨平台库,包含了大量的图像和视频处理函数。在OpenCV 1.0版本中,虽然现在看来较为...

    Visual C++ 数字图像处理软件源代码

    《Visual C++ 数字图像处理软件源代码》 在计算机科学领域,数字图像处理是一项重要的技术,它涉及图像的获取、分析、理解和显示。在这个项目中,我们关注的是使用Visual C++这一强大的编程环境来实现数字图像处理...

    《visual c++ 数字图像处理》源代码

    《Visual C++ 数字图像处理》源代码是一个包含多种图像处理技术实现的代码集合,主要使用C++编程语言。在图像处理领域,C++因其高效、灵活和丰富的库支持而被广泛采用。以下是对这个源代码包中可能涉及的一些关键...

    何斌等 Visual C++数字图像处理 源代码下载

    《何斌等 Visual C++ 数字图像处理》一书提供了丰富的源代码,旨在帮助读者深入理解和实践数字图像处理技术。这本书结合了理论与实践,利用Visual C++这一强大的编程工具,详细介绍了如何在C++环境下进行图像处理。...

    数字图像图像处理(包括灰度转换,二值化,直方图,翻转,滤镜处理等功能)

    本项目基于C++ Builder平台,提供了丰富的基础图像处理功能,如灰度转换、二值化、直方图分析以及图像翻转和滤镜处理等。下面将详细介绍这些关键知识点。 1. **灰度转换**:在彩色图像处理中,灰度转换是将RGB三...

    c++builder图像处理

    以下是对"伪彩色"、"边缘滤波"、"直方图"和"单通道显示"这些知识点的详细解释: 1. **伪彩色**:在计算机视觉中,伪彩色(False Color)是一种将灰度图像或单色图像转换为彩色图像的技术。在黑白图像上,不同灰度...

    zhifangtu.rar_zhifangtu _直方图均衡化

    而"直方图均衡"很可能是包含实现直方图均衡化算法的C++源代码文件。 在学习和理解直方图均衡化的过程中,除了理论知识,掌握实际编程实现也至关重要。C++作为一种常用的语言,提供了丰富的库如OpenCV,可以方便地...

    openCV实现直方图均衡化

    在图像处理领域,直方图均衡化是一种常用的...同时,提供的"数字图像的直方图均衡化(C-C++源代码).mht"文件可能包含更深入的代码实例,而"www.pudn.com.txt"可能是获取更多相关资源的链接,对于深入学习非常有帮助。

    数字图像处理典型算法源代码

    这些算法都是数字图像处理的基础,通过C++源代码的形式,我们可以更直观地理解它们的工作原理,并能快速在实际项目中应用。学习和理解这些源代码,对于提升图像处理技能和解决实际问题都大有裨益。

    图像处理C++程序

    这个“图像处理C++程序”很可能是包含了一系列用于处理和分析图像的源代码文件。以下是一些可能涉及的关键知识点和相关概念: 1. **基本数据类型与结构**:图像通常被表示为二维数组,其中每个元素代表一个像素,...

    基于opencv实现的彩色直方图反向投影,性质超吊~赞赞赞.zip

    结果是一个新的单通道图像,其中高值对应于与目标颜色更接近的像素。这个过程可以通过`cv::compare()`函数来实现,它将图像的每个像素值与直方图的每个桶进行比较,生成一个输出图像。 在实际代码`直方图反向投影....

    C++OpenCV3源代码反向投影

    根据提供的文件信息,我们可以深入探讨与“C++ OpenCV3 源代码反向投影”相关的知识点。这里将重点介绍反向投影的概念、在计算机视觉中的应用以及如何使用C++结合OpenCV库来实现反向投影功能。 ### 反向投影的基本...

Global site tag (gtag.js) - Google Analytics