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;
}
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?
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.
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)
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 02:47 AM.
Bookmarks