Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ g++;函数匹配与OpenCV 2.3.0_C++_Opencv_Compiler Errors_G++ - Fatal编程技术网

C++ g++;函数匹配与OpenCV 2.3.0

C++ g++;函数匹配与OpenCV 2.3.0,c++,opencv,compiler-errors,g++,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;

正在尝试编译以下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;
}
#包括
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;
补丁_rowrange.end=3;
patch_colrange.start=1;
贴片长度=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掩模(10,10,cv_8UC1,cv::Scalar(3.0));
patch(patch_rowrange,patch_colrange).copyTo(img(img_rowrange,img_colrange),mask(patch_rowrange,patch_colrange));
返回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&)const /usr/local/include/opencv2/core/core.hpp:1643:注:void cv::Mat::copyTo(const cv:_OutputArray&,const cv:_InputArray&)const

有什么解决办法吗?据我理解,这是因为在C++中处理临时对象和引用,但是我找不到任何合适的解决方案(即堆中的补丁和掩码分配不解决它)< /P>
另外,我要做的是使用遮罩将一个图像应用到另一个图像上,这只是显示问题的代码位。

在有问题的行上,语句
img(img\u rowrange,img\u 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));