5

在图像上应用cv2.pyrDown()时,我想明确指定图像的输出大小。

def gaussian_pyramid(image, scale=1.5, minSize=(30, 30)):
    yield image
    while True:
        w = int(image.shape[1] / scale)
        h = int(image.shape[0] / scale)
        image = cv2.pyrDown(image, dstsize=(w, h))
        if image.shape[0] < minSize[1] or image.shape[1] < minSize[0]:
            break
        yield image

但它会引发类似于此的错误。

OpenCV Error: Assertion failed (ssize.width > 0 && ssize.height > 0 && std::abs(dsize.width*2 - ssize.width) <= 2 && std::abs(dsize.height*2 - ssize.height) <= 2) in pyrDown_, file /io/opencv/modules/imgproc/src/pyramids.cpp, line 873

知道如何将图像的输出大小指定为方法参数。

4

2 回答 2

1

来自 OpenCV 2.4 教程:

pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 )

tmp:当前图片,用src原图初始化。

dst:目标图像(显示在屏幕上,应该是输入图像的一半

大小(tmp.cols/2,tmp.rows/2):目标大小。由于我们是下采样,pyrDown 期望输入图像大小的一半(在本例中为 tmp)。

请注意,输入图像可以除以两倍(在两个维度上)是很重要的。否则,将显示错误。

这取自 C++ 教程,但它应该同样适用于 Python。

于 2018-04-20T14:03:32.067 回答
0

抱歉,我忘记给出此处给出的正确答案。

pyrdown, pyrup 的系数为 2。因此,要处理奇数尺寸,我们必须dstsize用 +- 1 像素调整 is。

def gaussian_pyramid(image, scale=2, minSize=(60, 60)):
   yield image
   while True:
     w = int(image.shape[1] / scale)
     h = int(image.shape[0] / scale)
     image = cv2.pyrDown(image, dstsize=(w,h))
     if image.shape[0] < minSize[1] or image.shape[1] < minSize[0]:
        break
     yield image
于 2018-04-20T18:11:10.560 回答