[英]OpenCV - Live feed from camera is not smooth
我正在嘗試從網絡攝像頭捕獲實時Feed,但是當我顯示要捕獲的幀時,該Feed並不流暢。 顯示幀之間有短暫的休息。
這是我的一些代碼:
class Entity : public VideoLoader, public ImageReader, public Display
{
public:
Entity();
void init();
private:
std::unique_ptr<VideoLoader> ptrVideoLoaderObj;
std::unique_ptr<ImageReader> ptrImageReaderObj;
std::unique_ptr<Display> ptrDisplayObj;
};
Entity::Entity()
{
ptrVideoLoaderObj = std::make_unique<VideoLoader>();
ptrImageReaderObj = std::make_unique<ImageReader>();
ptrDisplayObj = std::make_unique<Display>();
}
void Entity::init()
{
cv::Mat frame;
while (true) {
ptrVideoLoaderObj->loadImageFromCam(frame);
if (ptrVideoLoaderObj->checkIfFrameIsEmpty(frame)) {
std::cerr<<"ERROR: captured empty frame\n";
break;
}
ptrDisplayObj->displayImage(frame);
if (cv::waitKey(30) >= 0)
break;
}
}
這是捕獲幀並顯示幀的方法的實現:
class VideoLoader
{
public:
cv::Mat loadImageFromCam(cv::Mat &frame);
bool checkIfFrameIsEmpty(cv::Mat &frame);
private:
cv::VideoCapture cam;
};
cv::Mat VideoLoader::loadImageFromCam(cv::Mat &frame)
{
cam.open(0);
cam >> frame;
return frame;
}
class Display
{
public:
void displayImage(cv::Mat &img) const;
};
但是當我做這樣的事情時:
Entity::Entity()
{
cv::Mat frame;
cv::VideoCapture cam(0);
while (true) {
cam >> frame;
cv::imshow("feed", frame);
if (cv::waitKey(30) >= 0)
break;
}
}
我得到了流暢的顯示。
為了獲得順暢的Feed,我應該在代碼中進行哪些更改?
不要調用cam.open(0); 在VideoLoader :: loadImageFromCam(cv :: Mat&frame)中,否則將被重復調用。
class VideoLoader
{
public:
cv::Mat loadImageFromCam(cv::Mat &frame);
bool checkIfFrameIsEmpty(cv::Mat &frame);
void OpenCam() { cam.open(0); }
private:
cv::VideoCapture cam;
};
cv::Mat VideoLoader::loadImageFromCam(cv::Mat &frame)
{
// cam.open(0); Don't use
cam >> frame;
return frame;
}
void Entity::init()
{
cv::Mat frame;
ptrVideoLoaderObj->OpenCam(); // see this - call open only once
while (true) {
ptrVideoLoaderObj->loadImageFromCam(frame);
if (ptrVideoLoaderObj->checkIfFrameIsEmpty(frame)) {
std::cerr<<"ERROR: captured empty frame\n";
break;
}
ptrDisplayObj->displayImage(frame);
if (cv::waitKey(30) >= 0)
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.