灰度直方图及处理“cvQueryHistValue_1D”: 找不到标识符”的问题(上)
// 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”: 找不到标识符”的问题(上)的更多相关文章
- OpenCV实现灰度直方图和直方图拉伸
原文链接:http://blog.csdn.net/xiaowei_cqu/article/details/7600666 如有疑问或者版权问题,请移步原作者或者告知本人. 灰度直方图是数字图像中最简 ...
- Opencv——灰度直方图
灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率. 如果将图像总像素亮度(灰度级别)看成是一个随机变量,则其分布情况就反映了图像的统计特性,这可用pro ...
- matlab显示原图和灰度直方图
**只会显示灰度直方图I = imread('*.bmp') %图必须是灰度图,或者转换为灰度图I=rgb2gray(I);imshow(I);imhist(I); **同时出现在一个平面上I = i ...
- 肺结节CT影像特征提取(五)——肺结节CT影像ROI区域灰度直方图及其图形化
在博客肺结节CT影像特征提取中,已经实现了肺结节的灰度.纹理和形态特征的提取.但是,对于进一步了解ROI区域像素值或者说CT值的分布来说,还存在一定的不足,不能够很好的显示ROI区域. 因此,本文将进 ...
- C#绘制数字图像灰度直方图
灰度直方图是灰度的函数,描述的是图像中具有该灰度级的像素的个数.如果用直角坐标系来表示,则它的横坐标是灰度级,纵坐标是该灰度出现的概率(像素的个数). 灰度直方图的分布函数: 其中,K是指第k个灰度级 ...
- 基于FPGA的HDTV视频图像灰度直方图统计算法设计
随着HDTV的普及,以LCD-TV为主的高清数字电视逐渐进入蓬勃发展时期.与传统CRT电视不同的是,这些高清数字电视需要较复杂的视频处理电路来驱动,比如:模数转换(A/D Converter).去隔行 ...
- c#数字图像处理(三)灰度直方图
灰度直方图是灰度的函数,描述的是图像中具有该灰度级的像素的个数.如果用直角坐标系来表示,则它的横坐标是灰度级,纵坐标是该灰度出现的概率(像素的个数). using System; using Syst ...
- C++问题-UniqueAppObject.cpp(147): error C3861: “GUXClientInit”: 找不到标识符
问题经过:在同事的产品上增加新功能,拿来的代码包,用VS打开后,提示某个文件不存在,从项目中移除.CPP.H文件后,提示错误,提示如下:1>UniqueAppObject.cpp(147): e ...
- “cvSnakeImage”: 找不到标识符
1>g:\project\opencv\helloopencv\helloopencv\helloopencv.cpp(74) : error C2065: "CV_VALUE&quo ...
随机推荐
- Java 工厂模式学习
工厂模式分三种:简单工厂.工厂方法.抽象工厂.其中抽象工厂是用于多个产品族的情况.所谓产品族就是不同产品组成的有机整体,各不同产品之间相互依赖.打个比方,一台电脑有CPU.主板.内存和硬盘等,这些不同 ...
- Oracle提示“资源正忙,需指定nowait”的解决方案
Oracle提示“资源正忙,需指定nowait”的解决方案 | T 本文我们主要介绍了Oracle数据库操作表时提示“资源正忙,需指定nowait”的解决方案,希望能够对您有所帮助. AD:51CT ...
- JS中特殊句子-with
1 with 语句 为一个或一组语句指定默认对象. 用法:with (<对象>) <语句>; with 语句通常用来缩短特定情形下必须写的代码量.在下面的例子中,请注意 Mat ...
- ARM Cortex M3(V7-M架构)硬件启动程序 二
解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...
- Get Intellisense for .axml files in Visual Studio
原文Get Intellisense for .axml files in Visual Studio So in order to get some intellisense support for ...
- [原]命令模式在MVC框架中的应用
其实在项目开发中,我们使用了大量的设计模式,只是这些设计模式都封装在框架中了,如果你想要不仅仅局限于简单的使用,就应该深入了解框架的设计思路. 在MVC框架中,模式之一就是命令模式,先来看看模式是如何 ...
- 深入Blocks分析
1.简介 从iOS4开始,苹果引入了这个C语言的扩充功能"Blocks",在一些特定的场景下也是一把利刃.我前面一篇博客中初步介绍了Blocks这个东西,主要是语法的介绍(< ...
- Python操作Access数据库
我们在这篇文章中公分了五个步骤详细分析了Python操作Access数据库的相关方法,希望可以给又需要的朋友们带来一些帮助. AD: Python编 程语言的出现,带给开发人员非常大的好处.我们可以利 ...
- dataset 用法(1)
DataSet是表和列结构在内存中的表示方式,DataSet支持多表.表间关系.数据约束等,和关系数据库的模型基本一致.(本质上是微型的数据库.包含一组DataTable对象和DataTable之间的 ...
- 如何查看npm配置?
npm config list //查看基本配置 npm config list -l //查看所有配置 npm本地安装与全局安装有什么区别? npm install grunt // 本地安装,则是 ...