OpenCV 获取圆上的像素
OpenCV get pixels on an circle
我是 OpenCV 的新手,我正在尝试从图像中获取圆的像素。
例如,我在随机图片上画了一个圆圈:
import cv2
raw_img = cv2.imread('sample_picture.png')
x = 50
y = 50
rad = 20
cv2.circle(raw_img,(x,y),rad,(0,255,0),-1)
cv2.imshow('output', raw_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出显示带有圆圈的图像。
但是,我希望能够以数组的形式将圆上的所有像素取回来。有什么办法吗?我知道我可以从圆公式中得到近似坐标,但是它会涉及很多小数计算,而且我很确定函数 cv2.circle()已经计算出像素点了,那有没有办法自己从函数中取出来而不是自己计算呢?
此外,如果可能的话,我想使用 cv2.ellipse() 返回椭圆的像素作为坐标数组。但是这次,我只想从椭圆的一部分获取像素(从某个角度到另一个角度,我可以在cv2.ellipse()的参数中指定)。
谢谢。
您可以使用 numpy 函数实现您想要的:
numpy.where(condition[, x, y])
link中函数的详细解释:https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.where.html
在您的情况下,您可能希望 return 具有非零值的坐标。使用此方法,您可以在空数组上绘制任何内容,它将 return 所有行和列对应于非零值。
它将return满足您设置条件的数组的索引。下面是显示用法示例的代码。
import cv2
import numpy as np
raw_img = cv2.imread('sample_picture.png')
x = 50
y = 50
rad = 20
cv2.circle(raw_img,(x,y),rad,(0,255,0),-1)
# Here is where you can obtain the coordinate you are looking for
combined = raw_img[:,:,0] + raw_img[:,:,1] + raw_img[:,:,2]
rows, cols, channel = np.where(combined > 0)
cv2.imshow('output', raw_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我是 OpenCV 的新手,我正在尝试从图像中获取圆的像素。
例如,我在随机图片上画了一个圆圈:
import cv2
raw_img = cv2.imread('sample_picture.png')
x = 50
y = 50
rad = 20
cv2.circle(raw_img,(x,y),rad,(0,255,0),-1)
cv2.imshow('output', raw_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出显示带有圆圈的图像。 但是,我希望能够以数组的形式将圆上的所有像素取回来。有什么办法吗?我知道我可以从圆公式中得到近似坐标,但是它会涉及很多小数计算,而且我很确定函数 cv2.circle()已经计算出像素点了,那有没有办法自己从函数中取出来而不是自己计算呢?
此外,如果可能的话,我想使用 cv2.ellipse() 返回椭圆的像素作为坐标数组。但是这次,我只想从椭圆的一部分获取像素(从某个角度到另一个角度,我可以在cv2.ellipse()的参数中指定)。
谢谢。
您可以使用 numpy 函数实现您想要的:
numpy.where(condition[, x, y])
link中函数的详细解释:https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.where.html
在您的情况下,您可能希望 return 具有非零值的坐标。使用此方法,您可以在空数组上绘制任何内容,它将 return 所有行和列对应于非零值。
它将return满足您设置条件的数组的索引。下面是显示用法示例的代码。
import cv2
import numpy as np
raw_img = cv2.imread('sample_picture.png')
x = 50
y = 50
rad = 20
cv2.circle(raw_img,(x,y),rad,(0,255,0),-1)
# Here is where you can obtain the coordinate you are looking for
combined = raw_img[:,:,0] + raw_img[:,:,1] + raw_img[:,:,2]
rows, cols, channel = np.where(combined > 0)
cv2.imshow('output', raw_img)
cv2.waitKey(0)
cv2.destroyAllWindows()