// HIstogram.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "opencv2/opencv.hpp"
#define cvQueryHistValue_1D( hist, idx0 ) \
((float)cvGetReal1D( (hist)->bins, (idx0))) int main()
{
IplImage* src= cvLoadImage("F:\\Opencv_picture\\05.jpg");
IplImage* gray_dst= cvCreateImage(cvGetSize(src), 8, 1);
cvCvtColor(src, gray_dst, CV_BGR2GRAY); //一维维数
int dims= 1;
//直方图的尺寸
int size= 256;
//直方图的高度
int height = 256;
//灰度图的范围0到255
float range[]= {0, 256};
float *ranges[]= {range}; //创建一维直方图
CvHistogram* hist;
hist= cvCreateHist(dims, &size, CV_HIST_ARRAY, ranges, 1); //计算灰度图的一维直方图
cvCalcHist(&gray_dst, hist, 0, 0);
//归一化直方图
cvNormalizeHist(hist, 1.0); int scale= 2;
//创建图像,用于显示直方图
IplImage* hist_img= cvCreateImage(cvSize(size* scale, height), 8, 3);
//图像置零
cvZero(hist_img); //计算直方图的最大方块值,初始化为0
float max_value= 0;
cvGetMinMaxHistValue(hist, 0, &max_value, 0, 0); //绘制直方图
for(int i=0; i<size; i++)
{
float bin_val= cvQueryHistValue_1D(hist, i); //像素i的概率
int intensity = cvRound(bin_val* height/ max_value); // 绘制的高度
cvRectangle(hist_img,
cvPoint(i* scale, height- 1),
cvPoint((i+1)* scale- 1, height- intensity),
CV_RGB(255, 255, 255));
} cvNamedWindow("gray");
cvShowImage("gray", gray_dst);
cvNamedWindow("Histogram");
cvShowImage("Histogram", hist_img); cvWaitKey(0); cvReleaseImage(&src);
cvReleaseImage(&gray_dst);
cvReleaseImage(&hist_img); cvDestroyWindow("gray");
cvDestroyWindow("Histogram");
}

看了小魏的修行路写的灰度直方图后写的,但我写的程序中出现f:\编程杂物区\histogram\histogram\histogram.cpp(45) : error C3861: “cvQueryHistValue_1D”: 找不到标识符的错误。经过搜索在程序中添加了

#define cvQueryHistValue_1D( hist, idx0 ) \
((float)cvGetReal1D( (hist)->bins, (idx0)))

程序就不报错了。

但是一样的程序(没有添加程序)在VC++6.0+opencv1.0上就不会出现报错的问题

// HIstogram.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "cv.h"
#include "highgui.h" int main()
{
IplImage* src= cvLoadImage("F:\\Opencv_picture\\05.jpg");
IplImage* gray_dst= cvCreateImage(cvGetSize(src), 8, 1);
cvCvtColor(src, gray_dst, CV_BGR2GRAY); //一维维数
int dims= 1;
//直方图的尺寸
int size= 256;
//直方图的高度
int height = 256;
//灰度图的范围0到255
float range[]= {0, 256};
float *ranges[]= {range}; //创建一维直方图
CvHistogram* hist;
hist= cvCreateHist(dims, &size, CV_HIST_ARRAY, ranges, 1); //计算灰度图的一维直方图
cvCalcHist(&gray_dst, hist, 0, 0);
//归一化直方图
cvNormalizeHist(hist, 1.0); int scale= 2;
//创建图像,用于显示直方图
IplImage* hist_img= cvCreateImage(cvSize(size* scale, height), 8, 3);
//图像置零
cvZero(hist_img); //计算直方图的最大方块值,初始化为0
float max_value= 0;
cvGetMinMaxHistValue(hist, 0, &max_value, 0, 0); //绘制直方图
for(int i=0; i<size; i++)
{
float bin_val= cvQueryHistValue_1D(hist,i); //像素i的概率
int intensity = cvRound(bin_val* height/ max_value); // 绘制的高度
cvRectangle(hist_img,
cvPoint(i* scale, height- 1),
cvPoint((i+1)* scale- 1, height- intensity),
CV_RGB(255, 255, 255));
} cvNamedWindow("gray");
cvShowImage("gray", gray_dst);
cvNamedWindow("Histogram");
cvShowImage("Histogram", hist_img); cvWaitKey(0); cvReleaseImage(&src);
cvReleaseImage(&gray_dst);
cvReleaseImage(&hist_img); cvDestroyWindow("gray");
cvDestroyWindow("Histogram"); return 0;
}

结果图:

灰度直方图及处理“cvQueryHistValue_1D”: 找不到标识符”的问题(上)的更多相关文章

  1. OpenCV实现灰度直方图和直方图拉伸

    原文链接:http://blog.csdn.net/xiaowei_cqu/article/details/7600666 如有疑问或者版权问题,请移步原作者或者告知本人. 灰度直方图是数字图像中最简 ...

  2. Opencv——灰度直方图

    灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率. 如果将图像总像素亮度(灰度级别)看成是一个随机变量,则其分布情况就反映了图像的统计特性,这可用pro ...

  3. matlab显示原图和灰度直方图

    **只会显示灰度直方图I = imread('*.bmp') %图必须是灰度图,或者转换为灰度图I=rgb2gray(I);imshow(I);imhist(I); **同时出现在一个平面上I = i ...

  4. 肺结节CT影像特征提取(五)——肺结节CT影像ROI区域灰度直方图及其图形化

    在博客肺结节CT影像特征提取中,已经实现了肺结节的灰度.纹理和形态特征的提取.但是,对于进一步了解ROI区域像素值或者说CT值的分布来说,还存在一定的不足,不能够很好的显示ROI区域. 因此,本文将进 ...

  5. C#绘制数字图像灰度直方图

    灰度直方图是灰度的函数,描述的是图像中具有该灰度级的像素的个数.如果用直角坐标系来表示,则它的横坐标是灰度级,纵坐标是该灰度出现的概率(像素的个数). 灰度直方图的分布函数: 其中,K是指第k个灰度级 ...

  6. 基于FPGA的HDTV视频图像灰度直方图统计算法设计

    随着HDTV的普及,以LCD-TV为主的高清数字电视逐渐进入蓬勃发展时期.与传统CRT电视不同的是,这些高清数字电视需要较复杂的视频处理电路来驱动,比如:模数转换(A/D Converter).去隔行 ...

  7. c#数字图像处理(三)灰度直方图

    灰度直方图是灰度的函数,描述的是图像中具有该灰度级的像素的个数.如果用直角坐标系来表示,则它的横坐标是灰度级,纵坐标是该灰度出现的概率(像素的个数). using System; using Syst ...

  8. C++问题-UniqueAppObject.cpp(147): error C3861: “GUXClientInit”: 找不到标识符

    问题经过:在同事的产品上增加新功能,拿来的代码包,用VS打开后,提示某个文件不存在,从项目中移除.CPP.H文件后,提示错误,提示如下:1>UniqueAppObject.cpp(147): e ...

  9. “cvSnakeImage”: 找不到标识符

    1>g:\project\opencv\helloopencv\helloopencv\helloopencv.cpp(74) : error C2065: "CV_VALUE&quo ...

随机推荐

  1. ExtJS4.2 Ext.grid.panel Store更改后刷新表格

    //////////////////////// // Prepare store //////////////////////// // prepare fields and columns var ...

  2. 《javascript dom编程艺术》笔记(二)——美术馆示例

    这几天把这本书看完了,里面大部分知识我已经会了,所以看得就略简单,好多地方都没有再去动手去做,我知道这样是不对的,以后补吧. 现在我要做的是把这本书的笔记完结掉,不然总觉得有啥事没有做. 这个版本不是 ...

  3. Android studio libs目录

    Android studio libs目录: 关于Android studio libs目录,Android studio 已经为我们自动生成了,如果默认 是看不到默认Libs目录的,点击红色按钮地方 ...

  4. Flink资料(1)-- Flink基础概念(Basic Concept)

    Flink基础概念 本文描述Flink的基础概念,翻译自https://ci.apache.org/projects/flink/flink-docs-release-1.0/concepts/con ...

  5. 面向对象程序设计-C++_课时17函数重载和默认参数

    函数重载,区别一是参数类型不同,二是参数个数不同. 默认参数可以多于1个,但必须放在参数序列的后部. 尽量不要用默认参数,会影响阅读 error C2668: “f”: 对重载函数的调用不明确 #in ...

  6. 使用PHP实现请求响应和MySql访问

    在iOS开发当中经常需要使用来自后台的数据,所以使用一种很简便的写后台的方法. 首先,安装XAMPP,这是一个集成好的阿帕奇+MySQL环境,点击按钮即可开启服务,不需要进行任何环境配置. 然后,开启 ...

  7. HDU ACM 1046 Gridland 找规律

    分析:给出一个矩阵.问最短从一个点经过全部点以此回到起点的长度是多少.绘图非常好理解.先画3*4.3*3.4*4的点阵图案.试着在上面用最短路走一走,能够发现当矩形点阵的长宽都是奇数时,最短路中必然有 ...

  8. 【Linux学习】Ubuntu下嵌入式交叉编译环境arm-linux-gcc搭建

    (1)首先选择一个路径用来存放arm-linux-gcc.我选用的是/home/book,并在以下建立一个目录arm-linux-gcc. (2)利用cp EABI-4.3.3_Emdedsky_20 ...

  9. mac 版本号控制工具SmartSVN7.5.4(破解版)

    SmartSVN7.5.4和破解工具,下载地址:http://download.csdn.net/detail/pearlhuzhu/7407319 操作步骤: 1.在MAC上选中smartsvn-m ...

  10. CSS蒙版

    蒙版:就是在图片上添加一个图层,用于美化页面,增加页面的可读性 <!DOCTYPE html><html><head lang="en"> &l ...