opencv 2.3 copyTo功能与2.2中的功能不一样 < >我写了一些OpenCV C++代码,我的代码从OpenCV 2.2移植到2.3.1有问题。现在的主要问题是Mat::copyTo函数。在文档或发行说明中,他们提到,虽然此函数的新版本采用OutputArray,但旧代码仍应可用(即,Mat::copyTo(Mat&m))。问题是它不起作用

opencv 2.3 copyTo功能与2.2中的功能不一样 < >我写了一些OpenCV C++代码,我的代码从OpenCV 2.2移植到2.3.1有问题。现在的主要问题是Mat::copyTo函数。在文档或发行说明中,他们提到,虽然此函数的新版本采用OutputArray,但旧代码仍应可用(即,Mat::copyTo(Mat&m))。问题是它不起作用,c++,opencv,C++,Opencv,这是我的密码 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

这是我的密码

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));

    }
}
由于错误而失败

对cv::Mat::copyTo(cv::Mat)候选者的调用没有匹配函数 是:void cv::Mat::copyTo(常量cv:_OutputArray&)常量

如果有任何帮助,我们将不胜感激?我能用什么方法解决这个问题


我想做的是得到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 copyMatRows(Mat&src、Mat&dest、int start\u pos)
{
对于(int i=0;i
编辑: 这应该可以满足您的需求:

void appendMatRows(Mat &src, Mat &dst, int start_pos)
{
    for(int i = start_pos; i < src.rows; i++)
    {
        dst.push_back(src.row(i));
    }
}
void appendMatRows(Mat&src、Mat&dst、int start_pos)
{
对于(int i=start_pos;i
push_-back
成员函数的主要警告是列数必须相同,但我认为您不会太担心这一点


希望有帮助

在OpenCV中有更有效的方法来复制矩阵。看看如何使用ROI。这是有道理的,但是如何使用呢?功能adjustROI和locateROI的工作方式与cvSetImageROI有些不同……我认为ROI与图像矩阵的增长有关,在进行操作之前,它们的工作方式略有不同,但最终实现的结果完全相同。与cvSetImageROI等效的是接受Rect的Mat构造函数。看看这里:是的,上面的方法工作得很好,但我想附加矩阵行
void appendMatRows(Mat &src, Mat &dst, int start_pos)
{
    for(int i = start_pos; i < src.rows; i++)
    {
        dst.push_back(src.row(i));
    }
}