2011-08-22 2 views
0

다음 OpenCV의 코드를 컴파일하려고 :그램 ++ 기능 매칭 및 OpenCV의 2.3.0

#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와 맥 OS 나는 다음과 같은 오류 얻을 :

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 + +에서 임시 개체 및 참조 처리 때문에 발생하지만 적절한 해결 방법을 찾을 수 없습니다 (즉, 힙의 패치 및 마스크를 할당해도 해결되지 않음)

P.S. 내가 할 일은 마스크를 사용하여 하나의 이미지를 다른 이미지 위에 적용하는 것입니다. 이것은 문제를 나타내는 코드의 일부일뿐입니다.

답변

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));