gpt4 book ai didi

c++ - 减少内存消耗

转载 作者:太空宇宙 更新时间:2023-11-04 14:53:10 25 4
gpt4 key购买 nike

我目前正在使用这段代码来分析网络摄像头帧:

int main()
{
VideoCapture cap(0); // open the default camera
if (!cap.isOpened()) // check if we succeeded
return -1;
cap.set(CV_CAP_PROP_FPS, 15);

std::vector<cv::Mat> images(9000);
for (framenumb = 0; framenumb < 9000; ++framenumb)
{
images[framenumb].create(480, 640, CV_8UC3);
}
for (framenumb = 0; framenumb < 9000; ++framenumb)
{
Mat frame;
cap >> frame;
if (frame.empty()) break; // end of video stream
if (waitKey(1) == 27) break; // stop capturing by pressing ESC
frame.copyTo(images[framenumb]);
imshow("webcam", images[framenumb]);
}
//We can then process the captured frames

但是会导致内存不足错误:

OpenCV Error: Insufficient Memory (failed to allocate xyz bytes) in unknown function, file 
..\..\opecv\modules\core\src\alloc.cpp line 52.

我有办法避免这种情况吗?非常感谢!

编辑:感谢大家的建设性反馈!我想我现在所能做的就是改变我解决问题的方法。我试图完成的是每 15 帧取平均值。例如:有 9000 帧,我将有 600 张平均图片。因此,我创建了一个包含 9000 张图像的 vector 并使用计数器来实现它。这是我稍后使用的代码:

for (int i = 0; i < 600; i++)
{
Mat avgImg(480, 640, CV_32FC3, Scalar());
for (framenumb = 15 * i; framenumb < (15 * i) + 15; ++framenumb)
{
cv::accumulate(images[framenumb], avgImg);
}
//stacking every 15 images into a single image
avgImg = avgImg / 15;
avgImg.convertTo(avgImg, CV_8UC3);
char filename[80];
sprintf(filename, "C:/AvgPics/test_%d.jpeg", framenumb);
imwrite(filename, avgImg);

那么有没有办法让我指定 opencv 对每 15 张图像取平均值,而不必使用 9000 张图像的 vector ?

最佳答案

编译为 64 位。 8 GB 并不过分,但 32 位程序最多限制为 4GB。 (我假设您有足够的 RAM - 总共至少 12 GB)。 OpenCV 支持 64 位。

关于c++ - 减少内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40531270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com