因此,我正在编写一些 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/