Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

findContours impossible result

hy all,

using findContours on this image (or any other binarised image...)

image description

i have strange result :

image description

has you can see, somme point are negative, so when i want to draw coutours, it's crash.

here is extract of my code :

img_inrange.copyTo(img_contour); Canny( img_contour, img_contour, 100, 200, 3 ); findContours(img_contour, contours, CV_RETR_LIST , CV_CHAIN_APPROX_NONE);

who can help mee ?

findContours impossible result

hy all,

using findContours on this image (or any other binarised image...)

image description

i have strange result :

image description

has you can see, somme point are negative, so when i want to draw coutours, it's crash.

here is extract of my code :

img_inrange.copyTo(img_contour); img_inrange.copyTo(img_contour);

Canny( img_contour, img_contour, 100, 200, 3 ); findContours(img_contour, contours, CV_RETR_LIST , CV_CHAIN_APPROX_NONE);

who can help mee ?

findContours impossible result

hy all,

using findContours on this image (or any other binarised image...)

image description

i have strange result :

image description

has you can see, somme point are negative, so when i want to draw coutours, it's crash.

here is extract of my code :

img_inrange.copyTo(img_contour);

Canny( img_contour, img_contour, 100, 200, 3 ); );

findContours(img_contour, contours, CV_RETR_LIST , CV_CHAIN_APPROX_NONE);

who can help mee ?

findContours impossible result

hy all,

using findContours on this image (or any other binarised image...)

image description

i have strange result :

image description

has you can see, somme point are negative, so when i want to draw coutours, it's crash.

here is extract of my code :

img_inrange.copyTo(img_contour);

Canny( img_contour, img_contour, 100, 200, 3 );

findContours(img_contour, contours, CV_RETR_LIST , CV_CHAIN_APPROX_NONE);

who can help mee ?

edit the is the full code :

include "camtest.hpp"

Mat img_test,img_affiche,img_origin,img_hsv,img_inrange,img_inrange2,img_canny,img_contour,img_gray; Point p(-100,-100); bool ac=false; RNG rng(12345);

int main(void) { int camnumber=1; bool debug=false; vector <objet> bougie(NBR_BOUGIE); string cfile,mc;

    namedWindow("img",CV_WINDOW_NORMAL| CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED);
    namedWindow("trackbar",CV_WINDOW_NORMAL| CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED);


    setMouseCallback( "img", onimg);
    waitKey(1);
    cfile.clear();
    cout<<"\nquelle image ?\n";
    cin>>cfile;
    img_origin=imread(cfile,3 );

        if(img_origin.data==NULL)
        {
            cout<<"erreur ouverture image..."<<endl;
            waitKey(1000);
            exit(0);
        }
        else
        {
            img_origin.copyTo(img_affiche);
            cvtColor(img_affiche,img_hsv,CV_RGB2HSV_FULL);
            imshow("img",img_affiche);
            waitKey(1);
        }

        //Scalar min(0,0,0),max(0,0,0);
        //jaune balle 72::121
        //jaune sol 135::147
        //rouge 170::186
        //bleu 16::28

        int min[3]={16,151,28},max[3]={39,255,255},canny[3]={7,2,3};//Hue, Sat, Value

        createTrackbar( "Hmin1", "trackbar",&min[0], 256);
        createTrackbar( "Hmax1", "trackbar", &max[0], 256);
        createTrackbar( "Smin1", "trackbar", &min[1], 256);
        createTrackbar( "Smax1", "trackbar", &max[1], 256);
        createTrackbar( "Vmin1", "trackbar", &min[2], 256);
        createTrackbar( "Vmax1", "trackbar", &max[2], 256);
        createTrackbar( "morph size", "trackbar", &canny[0], 15);

    vector<vector<Point> > contours,contours2;
    //Mat img_blob = Mat::zeros(img_hsv.rows, img_hsv.cols, CV_8UC1);
    Mat element = getStructuringElement( MORPH_RECT, Size( 2*canny[0] + 1, 2*canny[0]+1 ), Point( canny[0], canny[0] ) );
while(1)
{

    element = getStructuringElement( MORPH_RECT, Size( 2*canny[0] + 1, 2*canny[0]+1 ), Point( canny[0], canny[0] ) );

    inRange(img_hsv,Scalar(min[0],min[1],min[2]),Scalar(max[0],max[1],max[2]),img_inrange);

    blur( img_inrange, img_inrange, Size(3,3) );
    erode(img_inrange,img_inrange,element);
    dilate(img_inrange,img_inrange,element);

    threshold(img_inrange,img_inrange,1,255,THRESH_BINARY);
    img_inrange.copyTo(img_contour);


    Canny( img_contour, img_contour, 100, 200, 3 );


    imshow("img_inrange",img_inrange);
    imshow("canny",img_contour);
    //waitKey(0);

    findContours(img_contour, contours, CV_RETR_LIST , CV_CHAIN_APPROX_NONE);

    /*
    vector<Rect> boundRect(contours.size());
    vector<vector<Point> > contours_poly( contours.size() );
    Mat drawing = Mat::zeros( img_inrange.size(), CV_8UC3 );

        for(int i=0;i<contours.size();++i)
         {
             //Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
             Scalar color(255,0,0);
            boundRect[i] = boundingRect(contours[i]);
            rectangle( drawing, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0 );
        }

    //imshow("result",drawing);*/

    img_inrange2.setTo(0);
    img_affiche.copyTo(img_inrange2,img_inrange);//ptit mascage
    imshow("img_inrange2",img_inrange2);


    waitKey(25);



}
cout<<"end of program...";
destroyWindow("img");

}

click to hide/show revision 5
No.5 Revision

updated 2013-03-09 02:18:56 -0600

berak gravatar image

findContours impossible result

hy all,

using findContours on this image (or any other binarised image...)

image description

i have strange result :

image description

has you can see, somme point are negative, so when i want to draw coutours, it's crash.

here is extract of my code :

img_inrange.copyTo(img_contour);

Canny( img_contour, img_contour, 100, 200, 3 );

findContours(img_contour, contours, CV_RETR_LIST , CV_CHAIN_APPROX_NONE);

who can help mee ?

edit the is the full code :

include "camtest.hpp"

#include "camtest.hpp"

Mat img_test,img_affiche,img_origin,img_hsv,img_inrange,img_inrange2,img_canny,img_contour,img_gray;
Point p(-100,-100);
bool ac=false;
RNG rng(12345);

rng(12345); int main(void) { int camnumber=1; bool debug=false; vector <objet> bougie(NBR_BOUGIE); string cfile,mc;

cfile,mc;
 namedWindow("img",CV_WINDOW_NORMAL| CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED);
 namedWindow("trackbar",CV_WINDOW_NORMAL| CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED);
 setMouseCallback( "img", onimg);
 waitKey(1);
 cfile.clear();
  cout<<"\nquelle image ?\n";
 cin>>cfile;
  img_origin=imread(cfile,3 );
 if(img_origin.data==NULL)
 {
  cout<<"erreur ouverture image..."<<endl;
 waitKey(1000);
 exit(0);
 }
 else
 {
 img_origin.copyTo(img_affiche);
 cvtColor(img_affiche,img_hsv,CV_RGB2HSV_FULL);
 imshow("img",img_affiche);
 waitKey(1);
 }
  //Scalar min(0,0,0),max(0,0,0);
  //jaune balle 72::121
 //jaune sol 135::147
 //rouge 170::186
 //bleu 16::28
  int min[3]={16,151,28},max[3]={39,255,255},canny[3]={7,2,3};//Hue, Sat, Value
 createTrackbar( "Hmin1", "trackbar",&min[0], 256);
  createTrackbar( "Hmax1", "trackbar", &max[0], 256);
 createTrackbar( "Smin1", "trackbar", &min[1], 256);
 createTrackbar( "Smax1", "trackbar", &max[1], 256);
 createTrackbar( "Vmin1", "trackbar", &min[2], 256);
 createTrackbar( "Vmax1", "trackbar", &max[2], 256);
  createTrackbar( "morph size", "trackbar", &canny[0], 15);
 vector<vector<Point> > contours,contours2;
  //Mat img_blob = Mat::zeros(img_hsv.rows, img_hsv.cols, CV_8UC1);
  Mat element = getStructuringElement( MORPH_RECT, Size( 2*canny[0] + 1, 2*canny[0]+1 ), Point( canny[0], canny[0] ) );
 while(1)
 {
  element = getStructuringElement( MORPH_RECT, Size( 2*canny[0] + 1, 2*canny[0]+1 ), Point( canny[0], canny[0] ) );
 inRange(img_hsv,Scalar(min[0],min[1],min[2]),Scalar(max[0],max[1],max[2]),img_inrange);
  blur( img_inrange, img_inrange, Size(3,3) );
 erode(img_inrange,img_inrange,element);
 dilate(img_inrange,img_inrange,element);
 threshold(img_inrange,img_inrange,1,255,THRESH_BINARY);
 img_inrange.copyTo(img_contour);
  Canny( img_contour, img_contour, 100, 200, 3 );
 imshow("img_inrange",img_inrange);
 imshow("canny",img_contour);
 //waitKey(0);
  findContours(img_contour, contours, CV_RETR_LIST , CV_CHAIN_APPROX_NONE);
 /*
  vector<Rect> boundRect(contours.size());
  vector<vector<Point> > contours_poly( contours.size() );
  Mat drawing = Mat::zeros( img_inrange.size(), CV_8UC3 );
 for(int i=0;i<contours.size();++i)
 {
  //Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
 Scalar color(255,0,0);
  boundRect[i] = boundingRect(contours[i]);
  rectangle( drawing, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0 );
 }
 //imshow("result",drawing);*/
 img_inrange2.setTo(0);
  img_affiche.copyTo(img_inrange2,img_inrange);//ptit mascage
 imshow("img_inrange2",img_inrange2);
 waitKey(25);
 }
 cout<<"end of program...";
 destroyWindow("img");

}

}