1

我有一组蒙版图像,每次我在相机上识别出先前已知的场景时都需要使用它们。所有掩码图像均为 IplImage 格式。在某些情况下,例如,相机已经平移到稍微不同但附近的位置。这意味着如果我在当前场景的中间某处进行模板匹配,我将能够识别场景中模板在该场景中的一些偏移量。我需要做的就是使用这些变化来调整蒙版图像 ROI,以便可以根据模板匹配适当地覆盖它们。我知道有一些功能,例如:

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

我可以用它来设置裁剪/取消裁剪我的图像。但是,它并没有按我预期的方式退出。如果有人可以提出替代方案或我做错了什么,甚至是我没有想到的,我将不胜感激!

**我还必须指出,我需要始终保持图像大小相同。唯一不同的是图像中实际感兴趣的区域。我可能可以使用零/一填充来覆盖未使用的区域。

4

1 回答 1

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;

我自己尝试了代码,它对我来说也足够快(对于 332 x 332 灰度图像在大约 1 毫秒内执行)

于 2013-03-10T22:00:33.067 回答