我目前正在使用此代码来分析网络摄像头帧:
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
Run Code Online (Sandbox Code Playgroud)
但是,它会导致内存错误不足:
OpenCV Error: Insufficient Memory (failed to allocate xyz bytes) in unknown function, file
..\..\opecv\modules\core\src\alloc.cpp line 52.
Run Code Online (Sandbox Code Playgroud)
我有办法避免这种情况吗?非常感谢先进!
编辑:感谢所有人的建设性反馈!我想我现在能做的就是改变我对这个问题的态度.我试图完成的是平均每15帧.例如:对于9000帧,我将有600张平均图片.因此,我创建了一个9000图像的矢量,并使用计数器来实现它.这是我后来使用的代码:
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);
Run Code Online (Sandbox Code Playgroud)
那么有没有办法让我指定opencv来平均每15张图像而不必使用9000图像矢量?
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |