2013-03-01 6 views
1

У меня есть набор изображений масок, которые мне нужно использовать каждый раз, когда я узнаю ранее известную сцену на своей камере. Все изображения маски находятся в формате IplImage. Будут случаи, когда, например, камера перемещается в несколько другое, но близкое местоположение. это означает, что если я сделаю шаблон, соответствующий где-то посередине текущей сцены, я смогу распознать сцену с некоторым сдвигом шаблона в этой сцене. Все, что мне нужно сделать, это использовать эти сдвиги для настройки ROI-изображений с маской, чтобы они могли накладываться соответствующим образом на основе соответствия шаблонов. Я знаю, что существуют такие функции, как:Копирование части IplImage в другой Iplimage (то есть того же размера является источником)

cvSetImageROI(Iplimage* img, CvRect roi) 
cvResetImageROI(IplImage* img); 

Что я могу использовать для установки обрезки/снятия изображения. Тем не менее, это не помогло мне уйти так, как я ожидал. Я был бы очень признателен, если бы кто-то мог предложить альтернативу или то, что я делаю неправильно, или даже то, о чем я не думал!

** Я также должен указать, что мне нужно постоянно поддерживать размер изображения. Единственное, что будет отличаться, это реальная область интереса к изображению. Возможно, я использую нулевое/одно дополнение для покрытия неиспользуемых областей.

ответ

0

Я считаю, что решение, не делая слишком много копий исходного изображения будет:

// Make a new IplImage 
IplImage* img_src_cpy = cvCreateImage(cvGetSize(img_src), img_src->depth, img_src->nChannels); 

// Crop Original Image without changing the ROI 
for(int rows = roi.y; rows < roi.height; rows++) { 
    for(int cols = roi.x; rows < roi.width; cols++) {   
     img_src_cpy->imageData[(rows-roi.y)*img_src_cpy->widthStep + (cols-roi.x)] = img_src[rows*img_src + cols]; 
    } 
{ 

//Now copy everything to the original image OR simply return the new image if calling from a function 
cvCopy(img_src_cpy, img_src); // OR return img_src_cpy; 

Я попытался код на себя, и это также достаточно быстро для меня (выполняется в течение примерно 1 мс для 332 x 332 Изображение в оттенках серого)