如何在OpenCV的摄像头禁用缓存?
我有这样的情况下,我使用OpenCV的检测在相机的正面,并做一些ML这些面孔。我有问题是,一旦我做的所有的处理,并转到抓下一帧我得到的过去,不是现在。意思是,我会读取缓冲区内什么,而不是他实际上是在镜头前。因为我不在乎面对排在了镜头前,而处理,我现在关心的是在镜头前。
我曾尝试设置缓冲区大小1
,这确实帮助了不少,但我仍然会得到至少3个缓冲区读取。设置FPS为1,也剂量不会有助于消除这种情况下100%。贝娄是,我有流量。
let cv = require('opencv4nodejs');
let camera = new cv.VideoCapture(camera_port);
camera.set(cv.CAP_PROP_BUFFERSIZE, 1);
camera.set(cv.CAP_PROP_FPS, 2);
camera.set(cv.CAP_PROP_POS_FRAMES , 1);
function loop()
{
//
// <>> Grab one frame from the Camera buffer.
//
let rgb_mat = camera.read();
// Do to gray scale
// Do face detection
// Crop the image
// Do some ML stuff
// Do whats needs to be done after the results are in.
//
// <>> Release data from memory
//
rgb_mat.release();
//
// <>> Restart the loop
//
loop();
}
My question is:
是否有可能删除缓存中的所有在一起?如果是这样,怎么样。如果没有,why
将不胜感激。
我有同样的问题,但在C ++中。我没有找到OpenCV的妥善解决,但我发现了一个解决方法。该缓冲器累积图像的恒定数目,说n个帧。所以,你可以读取n不加分析框架和读取帧一次。这最后一帧将从摄像机的实时图像。就像是:
buffer_size = n;
for n+1
{
// read frames to mat variable
}
// Do something on Mat with live image
如何在OpenCV的摄像头禁用缓存?
我有这样的情况下,我使用OpenCV的检测在相机的正面,并做一些ML这些面孔。我有问题是,一旦我做的所有的处理,并转到抓下一帧我得到的过去,不是现在。意思是,我会读取缓冲区内什么,而不是他实际上是在镜头前。因为我不在乎面对排在了镜头前,而处理,我现在关心的是在镜头前。
我曾尝试设置缓冲区大小1
,这确实帮助了不少,但我仍然会得到至少3个缓冲区读取。设置FPS为1,也剂量不会有助于消除这种情况下100%。贝娄是,我有流量。
let cv = require('opencv4nodejs');
let camera = new cv.VideoCapture(camera_port);
camera.set(cv.CAP_PROP_BUFFERSIZE, 1);
camera.set(cv.CAP_PROP_FPS, 2);
camera.set(cv.CAP_PROP_POS_FRAMES , 1);
function loop()
{
//
// <>> Grab one frame from the Camera buffer.
//
let rgb_mat = camera.read();
// Do to gray scale
// Do face detection
// Crop the image
// Do some ML stuff
// Do whats needs to be done after the results are in.
//
// <>> Release data from memory
//
rgb_mat.release();
//
// <>> Restart the loop
//
loop();
}
My question is:
是否有可能删除缓存中的所有在一起?如果是这样,怎么样。如果没有,why
将不胜感激。
我有同样的问题,但在C ++中。我没有找到OpenCV的妥善解决,但我发现了一个解决方法。该缓冲器累积图像的恒定数目,说n个帧。所以,你可以读取n不加分析框架和读取帧一次。这最后一帧将从摄像机的实时图像。就像是:
buffer_size = n;
for n+1
{
// read frames to mat variable
}
// Do something on Mat with live image