forked from justadudewhohacks/opencv4nodejs
-
Notifications
You must be signed in to change notification settings - Fork 53
Open
Description
I've identified a memory leak in a Node.js project using OpenCV for template matching operations. The external memory usage keeps increasing over time despite explicit release calls.
Environment
- Node.js version: 20
- OpenCV version: 4.10
- OS: macOS
Code Example
const full = await cv.imdecodeAsync(fs.readFileSync('src/dev/full.jpg'));
const img = await cv.imdecodeAsync(fs.readFileSync('src/dev/1.jpg'));
const matched = await full.matchTemplateAsync(img, cv.TM_CCOEFF_NORMED);
const minMax = matched.minMaxLoc();
const { maxVal } = minMax;
const matchPercentage = maxVal * 100;
console.log('matchPercentage', matchPercentage);
full.release();
img.release();
matched.release();Memory Monitoring
setInterval(() => {
const used = process.memoryUsage();
console.log({
rss: `${Math.round(used.rss / 1024 / 1024 * 100) / 100} MB`,
heapTotal: `${Math.round(used.heapTotal / 1024 / 1024 * 100) / 100} MB`,
heapUsed: `${Math.round(used.heapUsed / 1024 / 1024 * 100) / 100} MB`,
external: `${Math.round(used.external / 1024 / 1024 * 100) / 100} MB`,
});
}, 1000);Issue
Despite explicitly calling release() on all OpenCV Mat objects (full, img, matched), the external memory usage continues to grow:
{
"rss": "1488.89 MB",
"heapTotal": "96.58 MB",
"heapUsed": "61.1 MB",
"external": "4220.46 MB"
}If you don't use asynchronous methods, this problem doesn't exist.
Metadata
Metadata
Assignees
Labels
No labels