c++ - opencv 2.3 copyTo 函数无法像在 2.2 中那样工作

标签 c++ opencv

因此,我正在编写一些 OpenCV C++ 代码,但在将我的代码从 OpenCV 2.2 移植到 2.3.1 时遇到了问题。现在的主要问题是 Mat::copyTo 函数。在文档或发行说明中,他们提到虽然此函数的新版本采用 OutputArray,但旧代码应该仍然有效(即 Mat::copyTo(Mat &m))。问题是它不起作用。

这是我的代码

void copyMatRows(Mat &src,Mat &dest,int start_pos)
{
    for(int i=0; i < src.rows;i++)
    {
        int dest_y = start_pos;

        if(start_pos < 1)
        {
            dest_y = dest_y+i;
        }
        src.row(i).copyTo(dest.row(dest_y));

    }
}

所以在上面的代码中有一行

src.row(i).copyTo(dest.row(dest_y));

因错误而失败

no matching function for call to cv::Mat::copyTo(cv::Mat) candidates are: void cv::Mat::copyTo(const cv::_OutputArray&) const

任何帮助将不胜感激?我可以用什么方法解决这个问题?

我想做的是获取 N 个矩阵并将它们全部组合成一个大矩阵。

最佳答案

这应该可以修复您的功能,但我不确定它是否完全符合您的要求:

void copyMatRows(Mat &src, Mat &dest, int start_pos)
{
    for(int i = 0; i < src.rows; i++)
    {
        int dest_y = start_pos;

        if(start_pos < 1)
        {
            dest_y = dest_y + i;
        }

        Mat destRow = dest.row(dest_y);
        src.row(i).copyTo(destRow);
    }
}

编辑: 这应该可以满足您的需求:

void appendMatRows(Mat &src, Mat &dst, int start_pos)
{
    for(int i = start_pos; i < src.rows; i++)
    {
        dst.push_back(src.row(i));
    }
}

push_back 成员函数的主要注意事项是列数必须相同,但我认为您不必太担心这一点。

希望对您有所帮助!

关于c++ - opencv 2.3 copyTo 函数无法像在 2.2 中那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8005627/

相关文章:

c++ - 如何使用 OpenCv 叠加图像?

c++ - 将Qt4移植到Qt5,为OpenGL调用获取未解析的外部符号

c++ - gcc c++ 命令行错误消息解析器

c++ - 有没有办法找出在 Linux 上编译 .so 库时使用的编译器选项?

java - Android jni 和 opencv 运行时无法加载库

python - opencv ximgproc.slic 和 skimage segmentation.slic 有什么区别?

C++:不寻常的运算符重载

C++ 序列化消息的方法?

c++ - 仅考虑特定像素(而非完整图像)的 OpenCV 颜色直方图 calcHist

opencv - 如何将分量从HSV转换为RGB,反之亦然