c++ - g++ 函数匹配和 OpenCV 2.3.0

标签 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: error: no matching function for call to ‘cv::Mat::copyTo(cv::Mat, cv::Mat)’ /usr/local/include/opencv2/core/core.hpp:1641: note: candidates are: void cv::Mat::copyTo(const cv::_OutputArray&) const /usr/local/include/opencv2/core/core.hpp:1643: note: void cv::Mat::copyTo(const cv::_OutputArray&, const cv::_InputArray&) const

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

附言我要做的是使用蒙版将一张图像应用到另一张图像上,这只是显示问题的代码。

最佳答案

在违规行中,语句 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));

关于c++ - g++ 函数匹配和 OpenCV 2.3.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7147347/

相关文章:

LuaRocks fPIC 错误

java - 使用数组和可变长度形式参数。 (java :38: error: '.class' expected)

java - 将 JVM 嵌入到 C++ 应用程序中 : How to link it properly?

python - 如何在不保存到磁盘的情况下将彩色 opencv 图像转换为 scikit?

opencv - 细胞分割的想法 - OpenCV

opencv - BackgroundSubtractorMOG2 的掩码

c# - 当类被密封时,类型的表达式...不能由模式处理

c++ - 如何根据 C++11 中的特定条件从 vector 中删除元素

c++ - 使用管理员权限在 Qt 中创建 .exe

c++ - 为什么我的应用程序在删除时崩溃?