opencv缩放功能奇怪的结果

时间:2012-03-04 15:56:50

标签: python opencv

我正在尝试编写一个看起来像这样的缩放功能:

centre = ((im.width-1)/2, (im.height-1)/2)
width = int(im.width/(2.0*level))
height = int(im.height/(2.0*level)) 
rect = (centre[0]-width, centre[1]-height, width*2, height*2)
dst = cv.GetSubRect(im, rect)
cv.Resize(dst, im)

当我完全使用上面所写的内容时,我得到一个奇怪的结果,结果图像的下半部分是扭曲和模糊的。但是当我用

替换行cv.Resize(dst, im)
size = cv.CloneImage(im)
cv.Resize(dst, size)
im = size

它工作正常。为什么是这样?我执行缩放的方式有什么根本性的错误吗?

1 个答案:

答案 0 :(得分:3)

cv.Resize要求源和目标是独立的内存位置。

现在,在代码的第一个片段中,您正在使用cv.GetSubRect生成一个指向您希望放大的图像区域的对象。这里新对象不指向新的内存位置。它指向一个内存位置,它是原始对象的子集。

由于cv.Resize要求两个内存位置不同,所以你得到的是未定义行为的结果。

在代码的第二部分中,您使用cv.CloneImage来满足此条件。 你是第一次创建im的副本(即大小。但是你可以使用空白图像)然后你使用cv.Resize来调整dst的大小并将结果图像写成大小。

我的建议是在使用它们之前通过函数documentation