Question about histogram output.

I have following code to create histogram, but it gave wrong output. In the program input_vector read 100 double numbers. I want to create a histogram with bin size=5. Output is [0;0;0;0;0]. Can anybody help me to figure out the problem?

Code:

`vector<double>three_dimensional_shape_retreival_Hough_Transform:: histogram_creation(vector<double> input_vector)`

{

long int i;

long int j;

Mat histogram_input(input_vector);

cout<<"Histogram Input Matrix:"<<histogram_input<<endl;

int histSize =5;

float max_distance= *max_element(input_vector.begin(), input_vector.end());

float min_distance= *min_element(input_vector.begin(), input_vector.end());

cout<<"Max Element:"<<max_distance<<" "<<"Min Element:"<<min_distance<<endl;

float range[] = { min_distance,max_distance};

const float* histRange = { range };

bool uniform = true;

bool accumulate = false;

Mat histogram_output;

calcHist(&histogram_input,1,0, Mat(), histogram_output,1,&histSize,&histRange,uniform,accumulate);

cout<<"Histogram Output Matrix:"<<histogram_output<<endl;

}

Re: Question about histogram output.

Quote:

Originally Posted by

**nihad**
I have following code to create histogram, but it gave wrong output. In the program input_vector read 100 double numbers. I want to create a histogram with bin size=5. Output is [0;0;0;0;0]. Can anybody help me to figure out the problem?

Code:

`vector<double>three_dimensional_shape_retreival_Hough_Transform:: histogram_creation(vector<double> input_vector)`

Pass vectors by reference or const-reference, not by value.

Code:

`vector<double>three_dimensional_shape_retreival_Hough_Transform:: histogram_creation(vector<double>&input_vector)`

As to fixing your problem, maybe it is because you passed the vector by value instead of by reference. Otherwise you need to post your entire application, including data that is used. For example, no one knows what a "Mat" is, or what "calcHist" does.

Regards,

Paul McKenzie

Re: Question about histogram output.

Here is the solution:

Function prototype would be

*vector<double>three_dimensional_shape_retreival_Hough_Transform:: histogram_creation(vector<***float**> input_vector) instead of *vector<double>three_dimensional_shape_retreival_Hough_Transform:: histogram_creation(vector<double> input_vector)*

Re: Question about histogram output.

Quote:

Originally Posted by

**nihad**
Here is the solution:

Function prototype would be

*vector<double>three_dimensional_shape_retreival_Hough_Transform:: histogram_creation(vector<***float**> input_vector) instead of *vector<double>three_dimensional_shape_retreival_Hough_Transform:: histogram_creation(vector<double> input_vector)*

You're still passing vectors by value when I stated they should be passed by reference.

Second, why is that a solution? What difference did it make from making it a vector<float> instead of a vector<double>? You need to explain why making that coding change fixed the problem.

Regards,

Paul McKenzie

Re: Question about histogram output.

I am using OpenCV library.

"images – Source arrays. They all should have the same depth, CV_8U or CV_32F"

so vector<double> is not a valid input. vector<float> should do.