我看到pyrDown
的声明:
CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,
const Size& dstsize=Size(), int borderType=BORDER_DEFAULT );
因此我假设第3个参数dstsize
可能类似于:Size(src.cols/4, src.rows/4
。但正如 docs 所说:
无论如何,应满足以下条件:
![]()
所以只有默认大小Size((src.cols+1)/2, (src.rows+1)/2)
才合法。那为什么需要参数dstsize
?它似乎没用......
我在这里找到了一个类似的问题:
http://answers.opencv.org/question/25281/pyrup-only-for-doubling-size/
和@berak评论说:
金字塔仅适用于2的力量
虽然我认为金字塔只能在2个的力量中工作,这是真的吗?
答案 0 :(得分:2)
英语:当src的宽度/高度为奇数,例如2*x+1
时,那么当使用pyrDown
时,一半将为(x+0.5)
,这是处理此类问题的默认方法情况就是它,这是Size((src.cols+1)/2, (src.rows+1)/2)
,但是我们也可以通过设置dstsize对其进行限制。
中文: (当图片边长是奇数时,折半后有0.5的小数,交替是向上取整,可以设置dstsize来向下取整)。
这是一张
(183, 275, 3)
形状的图像。
然后让我们在Python中测试
pyrDown
,有四种可能的dstsize:
>>> img = cv2.imread(fname)
>>> img.shape
(183, 275, 3)
>>> img1 = cv2.pyrDown(img)
>>> img1.shape # the default size is `Size((src.cols+1)/2, (src.rows+1)/2)`
(92, 138, 3)
>>> img2 = cv2.pyrDown(img, dstsize=(137, 91))
>>> img2.shape
(91, 137, 3)
>>> img3 = cv2.pyrDown(img, dstsize=(137, 92))
>>> img3.shape
(92, 137, 3)
>>> img4 = cv2.pyrDown(img, dstsize=(138, 91))
>>> img4.shape
(91, 138, 3)
注意:
shape: (h,w,c)
Size: (w,h)