g ++函数匹配和OpenCV 2.3.0

时间:2011-08-22 12:18:50

标签: c++ opencv compiler-errors g++

尝试编译以下OpenCV代码:

#include <opencv/cv.h>

int main(int argc,char *argv[])
{

    cv::Range img_rowrange, img_colrange, patch_rowrange, patch_colrange;

  img_rowrange.start=3;
  img_rowrange.end=6;
  img_colrange.start=2;
  img_colrange.end=5;

  patch_rowrange.start=0;
  patch_rowrange.end=3;
  patch_colrange.start=1;
  patch_colrange.end=4;

  cv::Mat img(10,10,CV_8UC1,cv::Scalar(1.0));
  cv::Mat patch(10,10,CV_8UC1,cv::Scalar(2.0));
  cv::Mat mask(10,10,CV_8UC1,cv::Scalar(3.0));

  patch(patch_rowrange,patch_colrange).copyTo(img(img_rowrange,img_colrange),mask(patch_rowrange,patch_colrange));


  return 0;
}

它在Windows下的MSVS2010中编译并运行良好,但是对于g ++和MacOS,我收到以下错误:

  

gpp_cv_fail.cpp:22:错误:没有匹配函数来调用'cv :: Mat :: copyTo(cv :: Mat,cv :: Mat)'   /usr/local/include/opencv2/core/core.hpp:1641:注意:候选者是:void cv :: Mat :: copyTo(const cv :: _ OutputArray&amp;)const   /usr/local/include/opencv2/core/core.hpp:1643:注意:void cv :: Mat :: copyTo(const cv :: _ OutputArray&amp;,const cv :: _ InputArray&amp;)const

有什么解决方法吗?据我所知,它是由于处理C ++中的临时对象和引用而发生的,但我找不到任何合适的解决方案(即在堆中分配补丁和掩码并不能解决它)

P.S。我要做的是使用掩码将一个图像应用于另一个图像,这只是显示问题的一些代码。

1 个答案:

答案 0 :(得分:1)

在有问题的行上,语句img(img_rowrange,img_colrange)会创建一个新的cv::Mat。编译器在将其作为参数传递时不允许您这样做,因为当您没有将它分配给变量时,您将永远无法检索数据。

所以尝试做这样的事情:

cv::Mat img_dst = img(img_rowrange,img_colrange);
patch(patch_rowrange,patch_colrange).copyTo(img_dst, mask(patch_rowrange,patch_colrange));