Merge pull request #3515 from asmorkalov:as/find_ellipses_memory

Fixed memory leak in EllipseDetector and Mat addressing
pull/3522/head 4.8.1
Alexander Smorkalov 2 years ago committed by GitHub
commit f10c84d48b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      modules/ximgproc/src/find_ellipses.cpp

@ -1272,9 +1272,9 @@ void EllipseDetectorImpl::preProcessing(Mat1b &image, Mat1b &dp, Mat1b &dn) {
// buffer
int *magBuffer[3];
void *buffer = malloc((imgSize.width + 2) * (imgSize.height + 2) +
(imgSize.width + 2) * 3 * sizeof(int));
magBuffer[0] = (int *) buffer;
AutoBuffer<int> buffer((imgSize.width + 2) * (imgSize.height + 2) +
(imgSize.width + 2) * 3);
magBuffer[0] = buffer.data();
magBuffer[1] = magBuffer[0] + imgSize.width + 2;
magBuffer[2] = magBuffer[1] + imgSize.width + 2;
uchar *map = (uchar *) (magBuffer[2] + imgSize.width + 2);
@ -1300,8 +1300,8 @@ void EllipseDetectorImpl::preProcessing(Mat1b &image, Mat1b &dp, Mat1b &dn) {
// 2 - the pixel does belong to an edge
for (int i = 0; i <= imgSize.height; i++) {
int *tmpMag = magBuffer[(i > 0) + 1] + 1;
const short *tmpDx = (short *) (dx[i]);
const short *tmpDy = (short *) (dy[i]);
const short *tmpDx = dx.ptr<short>(i);
const short *tmpDy = dy.ptr<short>(i);
uchar *tmpMap;
int prevFlag = 0;
@ -1980,4 +1980,4 @@ void findEllipses(
Mat(_ellipses).copyTo(ellipses);
}
} // namespace ximgproc
} // namespace cv
} // namespace cv

Loading…
Cancel
Save