OpenCV 超分辨率 OutputArray frame

超分辨率文档中,输出下一帧所需的代码是:
void superres::SuperResolution::nextFrame(OutputArray frame)

输入帧源必须通过以下方式设置:
void superres::SuperResolution::setInput(const Ptr<FrameSource>& frameSource)

我有一段从视频中获取帧的代码:

#include "opencv2/opencv.hpp"#include "iostream"using namespace cv;using namespace std;int main(int, char**){    VideoCapture cap ( "video1.mp4" ); // 打开默认摄像头    if( ! cap.isOpened () )  // 检查是否成功打开        return -1;    /* Mat edges; */    namedWindow ( "Video" , 1 );    double frnb ( cap.get ( CV_CAP_PROP_FRAME_COUNT ) );    std::cout << "帧总数 = " << frnb << endl;    for(;;)     {        Mat frame;        double fIdx;        std::cout << "请输入帧索引? ";        std::cin >> fIdx;        if ( fIdx < 0 || fIdx >= frnb ) break;        cap.set ( CV_CAP_PROP_POS_FRAMES , fIdx );        bool success = cap.read(frame);         if ( ! success )         {            cout << "无法读取帧 " << endl;            break;        }        /* cap >> frame; // 从摄像头获取新帧 */        imshow("Video", frame);        if ( waitKey (0) == 27 ) break;    }    // 摄像头会在VideoCapture析构函数中自动去初始化    return 0;}

鉴于此,我可以使用frame变量作为setInput方法的参数,但如何初始化生成输出的OutputArray frame呢?


回答:

我认为你不能将frame用作setInput的参数,而且你不需要初始化OutputArray frame

查看这个示例

FrameSource的创建方式如下:

   121. frameSource = createFrameSource_Video(inputVideoName);

然后,outputArray frame的使用方式如下:

   142. Mat result; // 无需初始化,只需声明   144. MEASURE_TIME(superRes->nextFrame(result));

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注