Соответствие функции g ++ и OpenCV 2.3.0 - PullRequest
0 голосов
/ 22 августа 2011

Попытка скомпилировать следующий код 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;
}

Он компилируется и хорошо работает в MSVS2010 под Windows, но с 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: note: void cv :: Mat :: copyTo (const cv :: _ OutputArray &, const cv :: _ InputArray &) const

Есть ли обходной путь для этого?Как я понимаю, это происходит из-за обработки временных объектов и ссылок в C ++, но я не могу найти какое-либо подходящее решение для этого (то есть выделение патча и маски в куче не решает его)

PS Что ясобирался сделать, это применить одно изображение к другому, используя маску, это всего лишь фрагмент кода, показывающий проблему.

1 Ответ

1 голос
/ 22 августа 2011

В ошибочной строке оператор 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...