• March 15th, 2013, 11:25 PM
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, 03:53 PM
Paul McKenzie
Quote:

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
• March 16th, 2013, 11:18 PM
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, 02:44 AM
Paul McKenzie
Quote:

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
• March 18th, 2013, 05:24 AM