Ask Your Question
0

Memory Leaks opencv 2.3

asked May 21 '13

baharsan gravatar image

I'am trying to use drawLargestContour mehthod to my program, but unfortunately my program suddenly turns off after about 1 minutes. I don't know why ? please some body help me :

this is my code (i use this for online capture) :

Mat HSV = new Mat();
    Imgproc.cvtColor(image, HSV, Imgproc.COLOR_RGB2HSV, 3);

    Mat mHSVThreshed = new Mat();
    //skin color detection
    Core.inRange(HSV,  new Scalar(0, 58, 89), new Scalar(25, 173, 229), mHSVThreshed);

    Mat hierarchy = new Mat(mHSVThreshed.rows(), mHSVThreshed.cols(), CvType.CV_8UC1, new Scalar(0));
    List<Mat> contours =new ArrayList<Mat>(100);

    Imgproc.findContours(mHSVThreshed, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE);

    Mat Mask = new Mat();
    Mask = Mat.zeros(mHSVThreshed.rows(), mHSVThreshed.cols(), CvType.CV_8UC1);

    Imgproc.drawContours(Mask, contours, -1, new Scalar(255), Core.FILLED);

    Mat crop = new Mat(image.rows(), image.cols(), CvType.CV_8UC3);

    crop.setTo(new Scalar(0,255,0));

    image.copyTo(crop, Mask);

    Core.normalize(Mask.clone(), Mask, 0.0, 255.0, Core.NORM_MINMAX, CvType.CV_8UC1);

    Mat Biner = new Mat();
    Mask.convertTo(Biner, CvType.CV_8U);

    Imgproc.cvtColor(Biner, image, Imgproc.COLOR_GRAY2RGB, 0);
    Imgproc.cvtColor(image, image, Imgproc.COLOR_RGB2RGBA, 0);

    return image;
Preview: (hide)

1 answer

Sort by » oldest newest most voted
1

answered May 31 '13

Prasanna gravatar image

Hey,

I suggest you to have a look at your RAM. If it is increasing while the program is running then it must be a problem with the memory allocation.

Since you are running this in a loop, I would suggest that you pre - allocate your memory before beginning the loop and only modify it within the loop. Maybe re - declaring it every time is the problem.(the "new" statement every time might be the problem. It is being reallocated in a different memory than overwriting it and the previous memory is not being released by the program)

Hope this helps.

Regards, Prasanna S

Preview: (hide)

Comments

Like he said. If you use the new operator, then you have to manually call the delete operation on the same object. However C++ can do this all for you. Remove the new operator and just call the Mat() without the new, memory will be released at the end of the scope of the variable then.

StevenPuttemans gravatar imageStevenPuttemans (May 31 '13)edit

Question Tools

Stats

Asked: May 21 '13

Seen: 1,345 times

Last updated: May 31 '13