Why my array had different data?
I'm debugging my code to get the largest and 2nd largest contour area using this code, but my output is very weird for the arrayarea. I put the data into the array which i had declared as float. The output as under the code. Which part i got it wrong?
float arrayarea[5];
// iterate through each contour.
for( int i = 0; i< contours.size(); i++ )
{
// Find the area of contour
double a=contourArea( contours[i],false);
arrayarea[i]=a;
cout<<" \narea="<<a<<endl;
if(a>largest_area)
{
largest_area=a;
// Store the index of largest contour
largest_contour_index=i;
// Find the bounding rectangle for biggest contour
//bounding_rect=boundingRect(contours[i]);
}
}
cout<<" \nlargest_area="<<largest_area<<endl;
cerr << "\nlargest_index=" <<largest_contour_index << endl;
std::cout << "\narray_area= " <<arrayarea<< std::endl;
waitKey(0);
first = second = INT_MIN;
for (i = 0; i < arrayarea[i] ; i ++)
{
/* If current element is smaller than first
then update both first and second */
if (arrayarea[i] > first)
{
second = first;
first = arrayarea[i];
}
/* If arr[i] is in between first and
second then update second */
else if (arrayarea[i] > second && arrayarea[i] != first)
second = arrayarea[i];
second_largest_contour_index=i;
}
if (second == INT_MIN)
printf("There is no second largest element\n");
else
printf("The second largest element is %dn", second);
printf("The second largest index is %dn", second_largest_contour_index);
waitKey(0);
Result:
[259.084, 55.9251] point
[143.648, 32.9001] point
area=2512.5
area=1346.5
largest_area=2512
largest_index=0
**array_area= 00007FF7D7C12A88**
The second largest element is 1346
The second largest index is 2
float arrayarea[5];
-- what if there are 7 contours ?please use a vector, and push_back(), and damn, finally READ a book on c++ !
for (i = 0; i < arrayarea[i] ; i ++)
-- broken, too.for (i = 0; i < arrayarea[i] ; i ++)
This line is a complete nonsense...
should have been
contours.size()
, i guessTo find the second largest contour, I suggest to repeat the first
for
loop with the moditicationif((a>second_largest_area)&&(a<largest_area)){second_largest_area=a;second_largest_contour_index=i;}
"Which part i got it wrong?" -- all of it, sorry.
You should get this book: The C++ Programming Language (4th Edition): http://www.stroustrup.com/4th.html