2014년 10월 13일 월요일

OpenCV Array로 Mat를 만들 경우, 형식은 call by value 같지만, 실제로는 call by reference

[-] Collapse
//OpenCV Array로 Mat를 만들 경우, 형식은 call by value 같지만, 실제로는 call by reference
using namespace cv;
class Ckernel
{
public:
    Mat m_kernel;
    Ckernel();
};

Ckernel::Ckernel()
{
    float m_Arr[9] = {1,1,1,1,1,1,1,1,1};
    //m_Arr가 delete되면 m_kernel의 data값도 delete된다.
    m_kernel =  Mat(3,13,CV_32F,m_Arr);
}

int _tmain(int argc, _TCHAR* argv[])
{
    Mat& img = imread("temp.jpg",CV_LOAD_IMAGE_GRAYSCALE);
    Mat dst;

    Ckernel kernel;

    //kernel의 m_kernel의 data는 이미 delete된 상태
    filter2D(img,dst,img.depth(),kernel.m_kernel,Point(1,1));
    //이미지가 black이 된다.
    imwrite("result.jpg",dst);
    return 0;
}

댓글 없음:

댓글 쓰기