2011-08-22 10 views
0

グラム++関数マッチングと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 ++と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++で一時的なオブジェクトや参照を扱うために起こりますが、適切な解決策が見つけられません(つまり、ヒープにパッチとマスクを割り当てても解決できません)。

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