2014-02-24 6 views
0

opencv를 사용하고 있으며 처리하는 동안 이미지를 표시하고 싶습니다.
내 문제는 내가 MatToUIImage을 사용할 때 메모리 사용량이 너무 많아 져서 내 응용 프로그램이 충돌합니다.메모리 압력으로 인해 MatToUIImage에서 내 응용 프로그램을 종료합니다.

하지만 여기서 내가 뭘 할 수 있습니까? image은 뷰 컨트롤러의 멤버이며 메서드에서 인스턴스화되지 않습니다.
processImage은 opencv의 위임 방법이 될 수 있습니다. 마지막 두 의견에 응답에서

- (void)processImage:(cv::Mat&)img 
{ 
    image = img; 
    testImage = MatToUIImage(image); 
} 
+0

iOS의 OpenCV에 익숙하지 않습니다. 'testImage'의 타입은 무엇입니까? – AldurDisciple

+0

유형은 UIImage입니다. iOS 및 OpenCV 조합의 버그 일 수 있습니다. – madmax

+0

나는 서명이'UIImage * MatToUIImage (const cv :: Mat & m)'인 것을 보았습니다. 그래서'testImage'는 포인터입니다. 이 포인터를 적절하게 해제해야합니까? 각 프레임에 할당 된 경우? – AldurDisciple

답변

1

:

AFAIK 참조 카운팅과 포인터의 해제 메모리는 다른 것입니다. 포인터를 놓지 않으면 참조가 줄어들지 않고 메모리에서 지워지지 않습니다. 무슨 일이 있어도, 포인터를 공개해야합니다.

+0

여기서해야 할 일을 이해하지 못합니다. 나는 같은 문제를 겪고있다. ARC를 사용하면 [이미지 공개]를 할 수 없습니다. –

+0

이 http://docs.opencv.org/modules/core/doc/intro.html#automatic-memory-management를 읽고 대답을 다시 읽으면 매우 명확합니다. 힙에 작성된 포인터를 작성중인 경우이를 명시 적으로 삭제해야합니다. 또는 스택에 이미지를 만드는 경우 참조가없는 경우 이미지가 삭제됩니다. – guneykayim

+1

나는 그것이 그것을 놓쳤다는 것을 나는 모른다. 방금 내 코드 주위에 @autoreleasepool {}을 싸야했습니다. @autoreleasepool을 여러 번 사용합니다. 왜 클릭하지 않았는지 모르겠습니다. –

관련 문제