2013-03-01 81 views
1

我有一組蒙版圖像,每次我在相機上識別出以前已知的場景時,都需要使用蒙版圖像。所有的蒙版圖像都是IplImage格式。例如,有些情況下,相機會搖攝到略微不同但靠近的位置。這意味着如果我在當前場景的中間某個地方做了一個模板匹配,那麼我將能夠通過在這個場景中進行一定量的模板移動來識別場景。我需要做的就是使用這些輪班來調整蒙板圖像ROI,以便可以根據模板匹配適當地疊加它們。我知道,有功能,如:將IplImage的一部分複製到另一個Iplimage中(其大小相同)

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

,我可以用它來設置裁剪/ uncrop我的形象。然而,這對我來說並不合適,我放棄了我的預期。我真的很感激,如果有人可以提出替代方案或我做錯了什麼,或者甚至我沒有想到的!

**我還必須指出,我需要始終保持圖像大小一致。唯一不同的是圖像中的實際感興趣區域。我大概可以使用零/一個填充來覆蓋未使用的區域。

回答

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灰度圖像)