2013-07-09 8 views
0

я следующая функция, которая извлекает суб-изображение из OpenCV cv::MatПереприсвоить к Мат в OpenCV

void Process(int a,int b,int c,int d) 
{ 
    // Extract img(a:b,c:d) each time   
    subImg = img(cv::Range(a, b), cv::Range(c,d)); 
} 

Я называю Process() в цикле. При каждом вызове значения a,b,c,d продолжают меняться. Если subImg было объявлено как cv::Mat subImg;, могу ли я сделать выше? т.е. Может OpenCV динамически изменять размер subImg или я должен пойти для подхода на основе указателей, где я объявляю:

cv::Mat* subImg; // Initialized to NULL in constructor 

и изменить функцию следующим образом:

void Process(int a,int b,int c,int d) 
{ 
    // Extract img(a:b,c:d) each time   
    if(subImg) delete subImg;   
    subImg = img(cv::Range(a, b), cv::Range(c,d)).clone(); 
} 

ответ

1

Вы можете сделать это с cv::Mat subImg;. cv::Mat использует подсчет ссылок, а подматрица знает, что он принадлежит большей матрице, поэтому память будет освобождена должным образом.

Смежные вопросы