python cv2.circle 子像素绘制
有没有人知道怎么用cv2.circle这个函数里的“shift”参数来画圆?
import cv2
import numpy as np
i1 = np.zeros((256, 256, 3), np.float32)
cv2.circle(i1, (199,199), 10, (1,0,0), -1)
cv2.imshow('1', i1)
i2 = np.zeros((256, 256, 3), np.float32)
cv2.circle(i2, (199,199), 10, (1,0,0), -1, shift=1)
cv2.imshow('2', i2)
cv2.waitKey(10000)
我本来以为第二个圆应该在(99.5, 99.5)这个位置,也就是199乘以2的负1次方,结果我发现它和第一个圆在同一个地方。谢谢!
2 个回答
1
到目前为止,我没有遇到这个问题(使用的是 openCV 3.1.0)。不过你要注意:输入的 radius
也会发生变化!所以在你的例子中,第二个圆的大小只有一半。
2
shift参数就像是把所有东西都乘以(1 << shift)这个值。
所以,如果你想在(199.5, 199.5)这个位置画一个圆,你需要这样做:
i2 = np.zeros((256, 256, 3), np.float32)
shift = 3
factor = (1 << shift)
cv2.circle(i2, (int(199.5 * factor + 0.5),int(199.5 * factor + 0.5)), 10 * factor, (1,0,0), -1, shift=shift)
cv2.imshow('2', i2)