2014-06-29 52 views
0

我写了一些代码,以10%的灰色条添加到图像的左侧和右侧,像这样:为什么这个Open CV代码泄漏?

// Create image 20% wider 
cv::Mat widenedImage(image.rows, 
        image.cols * 1.2, 
        CV_8UC1, 
        127); // Grey colour 

// Make a region of interest in the middle of the new image 
cv::Mat toROI(widenedImage, cv::Rect((widenedImage.cols - image.cols)/2.0, 
            0, 
            image.cols, 
            image.rows)); 

// Copy the image to the region of interest 
image.copyTo(toROI); 

如果没有代码,使用image直接,应用程序运行正常。添加时,XCode的内存图不会增长,但是我收到了几条警告,随后出现此消息。

enter image description here

任何想法?

+0

图片的类型是CV_8UC1? – marol

+0

@Robert:你也可以分享警告信息。另外,您可以尝试使用比当前尺寸更小的图像。 –

+0

你有没有在'cv :: Rect()'之前使用'static_cast '尝试'在'widenedImage'中的列的初始化过程中? – scap3y

回答

0

我通常会创建toROI这样说:

cv::Mat toROI(widenedImage(cv::Rect((widenedImage.cols - image.cols)/2.0, 
           0, 
           image.cols, 
           image.rows))); 

,或者你,如果你不需要toROI后来我建议是这样的:

image.copyTo(widenedImage(cv::Rect((widenedImage.cols - image.cols)/2.0, 
           0, 
           image.cols, 
           image.rows))); 

或可能考虑使用copyMakeBorder()

此外,您的浮点部门可能会创建舍入错误。尝试使用它们在之前将大小值保存为整数

+0

感谢您的建议,但是仍然产生相同的崩溃:(。copyMakeBorder我喜欢这个: 'int borderSize = image.cols * 0.1;' 'cv :: copyMakeBorder(image,image,0,0, borderSize,borderSize,cv :: BORDER_CONSTANT);' – Robert

+0

请参阅我的更新重新:FP部门。 –