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;
    }
    


    结果图:

  • 相关阅读:
    Android 解决小米手机Android Studio安装app 报错的问题It is possible that this issue is resolved by uninstalling an existi
    Android Unresolved Dependencies
    Android studio 自定义打包apk名
    Android Fragment与Activity交互的几种方式
    魅族和三星Galaxy 5.0webView 问题Android Crash Report
    Android几种常见的多渠道(批量)打包方式介绍
    Android批量打包 如何一秒内打完几百个apk渠道包
    上周热点回顾(9.30-10.6)团队
    上周热点回顾(9.23-9.29)团队
    上周热点回顾(9.16-9.22)团队
  • 原文地址:https://www.cnblogs.com/james1207/p/3322830.html
Copyright © 2011-2022 走看看