
March 16th, 2013, 12:25 AM
#1
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;
}

March 16th, 2013, 04:53 PM
#2
Re: Question about histogram output.
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 constreference, 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

March 17th, 2013, 12:18 AM
#3
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)

March 17th, 2013, 03:44 AM
#4
Re: Question about histogram output.
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
Last edited by Paul McKenzie; March 17th, 2013 at 03:47 AM.

March 18th, 2013, 06:24 AM
#5
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.
Tags for this Thread
Posting Permissions
 You may not post new threads
 You may not post replies
 You may not post attachments
 You may not edit your posts

Forum Rules

Click Here to Expand Forum to Full Width
This a Codeguru.com survey!
