python cv2.circle 子像素绘制

2 投票
2 回答
4901 浏览
提问于 2025-04-17 14:19

有没有人知道怎么用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)

撰写回答