【问题标题】:Split frames obtained from video into separate channels将从视频中获得的帧分割成单独的通道
【发布时间】:2016-02-23 11:52:18
【问题描述】:

我正在尝试逐帧读取视频 (mp4),然后将帧从 BGR 转换为 HSV。 然后我想将 HSV 垫分成不同的通道(色调、饱和度、值)。

但是,这不起作用:

void colorize () {

VideoCapture cap("myFile.mp4");
Mat frame;
Mat frame2;



while (true) {
    cap>>frame;
    cvtColor(frame, frame2, CV_BGR2HSV);
    Vector<Mat> channels;
    split(frame2, channels);




   }
}

拆分函数给出以下错误:

no matching function for call to ‘split(cv::Mat&, cv::Vector<cv::Mat>&)’
     split(frame2, channels);

我已经在循环之外尝试了与我之前转换为 hsv 的另一个图像完全相同的代码,它工作正常,所以我认为问题一定是循环。

有什么想法吗?

【问题讨论】:

    标签: c++ opencv video split


    【解决方案1】:

    您使用的是cv::Vector,而您应该使用std::vector(注意小写v)。

    std::vector<Mat> channels; // std::vector, not cv::Vector
    split(frame2, channels);
    

    【讨论】:

    • 我会在 7 分钟内接受,stackoverflow 不会让我更早。同时,为什么我必须使用 std::vector? cv::Vector 在循环外工作得很好?
    • 你确定吗?即使在循环之外,使用 cv::Vector 也不应该工作。
    • 我的错。现在我有点为这个问题感到羞耻。
    • 明确的问题,简单的解决方案。现在大家都很开心;D
    猜你喜欢
    • 1970-01-01
    • 2016-12-22
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多