2012-10-22 3 views
0

저는 함수에서 이미지를 반환하는 효율적인 방법이 아니라고 생각합니다.함수에서 하나 이상의 이미지를 반환하는 방법?

내가 사용하는 경우, 위의 예를 들어

void processImg(IplImage* srcImg, IplImage* dstImg1, IplImage* dstImg2) 
{ 
....processing image 
cvCopy(..., dstImg1); 
cvCopy(..., dstImg2); 
} 

, 어떻게 내가 다시 두 이미지를 반환 할 수 있습니다?

IplImage * processImg (IplImage * srcImg, IplImage * dstImg1, IplImage * dstImg2)를 사용하면 하나의 이미지 만 반환 할 수 있습니다.

어떻게이 두 기능을 기반으로 이미지를 반환 할 수 있습니까?

+0

당신이 그 둘을 채우기 (당신이 cvCopy로하는 것처럼) 그 때 함수가 반환 한 후 그 내용을 유지하고 효과적으로있는 경우이 질문에 나열로는, dstImg1 및 dstImg2 포인터를 걸리는 기능 " "둘 다 돌려 보냈다. 문제가 무엇인지 구체적으로 설명해 주시겠습니까? – Hammer

+0

함수에서 두 이미지를 반환하는 올바른 방법을 사용하고 있습니까? 나는 이것이 프로그래밍에서 좋은 관행이 아니라는 것을 알았다. – Mzk

+0

C 및 C++은 반환 인수를 두 개 이상 가질 수 없습니다. C 또는 C++에 대해 이야기하고 있다면이 게시물을 보려는 데 매우 흥미가 있습니다. – Hammer

답변

1

당신이하고있는 일이 효과가 있습니다. 두 dst 이미지에 포인터를 전달하고 있습니다. 즉,이 이미지를 수정하면 실제로 원래 이미지가 수정됩니다.

원하는 이미지가 아니고 실제로 두 개의 이미지를 반환하려는 경우 목록 또는 연결된 목록과 같은 다른 데이터 구조를 탐색 할 수 있습니다. 해당 구조에 두 이미지를 놓고 구조를 반환 할 수 있습니다.

std::list<IplImage *> processImg(IplImage* srcImg) 
{ 
    std::list<IplImage *> image_list; 

    //....processing image 

    //create two ipl images pointers 
    IplImage *dstImg1, *dstImg2; 

    //allocate memory for the ipl images 

    //copy the data into images 
    cvCopy(..., &dstImg1); 
    cvCopy(..., &dstImg2); 

    //add the images to list 
    image_list.push_back(dstImg1); 
    image_list.push_back(dstImg2); 

    return image_list; 
} 

+0

"두 dst 이미지에 포인터를 전달하고 있습니다. 즉,이 이미지를 수정하면 실제로 원래 이미지가 수정됩니다." 여기서 의미하는 바를 이해하지만 "실제로 두 개의 이미지를 반환하고 목록 또는 연결된 목록과 같은 다른 데이터 구조를 탐색 할 수 있습니다. 두 이미지를 구조에 넣고 구조를 반환 할 수 있습니다." 나는 여기서 정말로 이해하지 못한다. 더 설명해 주 시겠어요? – Mzk

+0

Nick 외에도 std :: list에 대한 "add"의 멤버 함수가 없습니다. – Mzk

+0

add 대신 push_back을 사용하십시오. – Nick

관련 문제