zoukankan      html  css  js  c++  java
  • 灰度直方图及处理“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:编程杂物区histogramhistogramhistogram.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;
    }
    


    结果图:

  • 相关阅读:
    罗尔定理、微分中值定理、广义微分中值定理
    高等数学和数学分析教材推荐及其学习方法浅谈
    音视频下载插件 安装及使用
    win10台式机rtl8188eu(FW 150 UM V2.0)无线网卡无法连接wifi(无法连接到这个网络)
    django模板中的extends和include使用方法
    wordpress中文目录出现“有点尴尬诶!该页无法显示"
    wordpress迁移后登陆时出现Forbidden You don’t have permission to access /wp-login.php on this server
    centos设置开机自启动脚本
    hexo的jacman主题设置语言为英文后偶尔出现中文
    安卓QQ聊天记录导出、备份完全攻略
  • 原文地址:https://www.cnblogs.com/james1207/p/3322830.html
Copyright © 2011-2022 走看看