2013-04-22 4 views
2

OpenCV (C++)를 사용하여 크기가 다른 이미지를 단일 데이터 구조에 보관하거나 저장하는 방법이 있는지 궁금합니다. 예를 들어, MATLAB에서 "셀"을 사용하여이를 수행 할 수 있습니다.데이터 구조에 다른 크기의 이미지 저장 OpenCV

특히 크기가 다른 이미지 인 결과를 생성하고 있으며이를 단일 데이터 구조에 저장할 수 있다면 나에게 화를 낼 수 있습니다. 그래서, 나는 그것을 늦게 사용할 수 있습니다. 이 작업은 C++ 및 OpenCV에서 수행해야합니다.

시도해 볼 생각입니다 : std :: vector. 고마워.

+2

'std :: vector'를 사용해보세요! –

+0

OpenCV에서 +1 기능을 사용하려면'std :: vector ' – Amro

답변

2

나는이 문제가 당신이 C++의 객체에 대해 생각하는 방식으로 생각합니다. Matlab은 하나의 벡터/배열/행렬에서 같은 크기의 객체를 요구하지만 행렬에서 작동하도록 최적화되어 있기 때문에 호출해야합니다. 이러한 연산은 행렬의 크기에 따라 달라집니다.

C++에서 주요 개체는 개체입니다. matlab 벡터와 가장 유사한 것은 cv::Mat potatoes[30]과 같은 배열입니다. 그러나 이것조차도 동일한 클래스의 객체로 채워지도록 요구하며, 그 내용은 cv::Mat 내용의 크기를 무시합니다. 당신이 얼마나 많은 양말을 알 필요가 있기 때문에 당신은 여기에주의 하시고 필요 -

  • 배열, cv::Mat crazySocks[42] 같은 :

    그래서, 모든 것을 마무리하기 위해, 당신은 선택의 몇 가지있다 Vinoj John Hosan에 의해 제안 된 바와 같이 std::vector<cv::Mat> jaguars과 같이 배열 범위 바깥에

  • 벡터가 나올 경우 세그먼테이션 오류가 발생할 수 있습니다. 이는 stl 컨테이너가 내용에 멋진 트릭을 수행 할 수 있기 때문에 좋은 생각입니다. 벡터의 크기를 쉽게 수정할 수 있습니다.
  • 목록, 예 : std::list<cv::Mat> toFind - 컨테이너의 크기를 자주 수정하려는 경우 벡터보다 좋습니다.
  • 위와 같은 내용이 있지만 포인터가있는 경우 cv::Mat *crazyPointers[33]과 같이 큰 개체를 이동할 때 해당 개체가있는 위치에 대한 정보 만 이동하는 것이 좋습니다. cv::Mat은 내부적으로 데이터로 일부 트릭을 수행하므로 그렇게해서는 안됩니다.
+0

여러분 모두에게 감사드립니다. 나는 std :: vector 으로 이미 시도했으며 현재 상황에 완벽하게 잘 작동한다. @morynicz는 친절한 제안에 다시 한 번 감사드립니다. 그러나 미리 고정 크기 배열을 사용할 수는 없습니다. 그러나, 나는 목록 아이디어를 좋아한다. (표준 : list : 또한 시도해 보겠다.) – Sanchit

+0

@morynicz : 일반 컨테이너의 MATLAB에 상응하는 [셀 배열] (http : // www.mathworks.com/help/matlab/cell-arrays.html) – Amro

3
Yeah you can try this 

    std::vector<cv::Mat> ImageDataBase; 

for(int i=0;i<length_of_imageDataBase;i++) 
{ 
    cv::Mat img = cv::imread("Address of the images"); 
    ImageDataBase.pushback(img); 
} 
관련 문제