OpenCV获取圆上的像素

Ste*_*102 6 python-3.x opencv3.0

我是 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()
Run Code Online (Sandbox Code Playgroud)

输出显示带有圆圈的图像。但是,我希望能够以数组的形式获取圆上的所有像素。有什么办法可以做到这一点吗?我知道我可以从圆公式中得到近似坐标,但是它会涉及大量的小数计算,而且我很确定函数cv2.circle()已经计算出了像素,那么有没有办法得到它是从函数本身中得出的,而不是计算我自己?

另外,如果可能的话,我想使用cv2.ellipse()获取椭圆的像素作为坐标数组。但这一次,我只想从椭圆的一部分(从某个角度到另一个角度,我可以在 cv2.ellipse() 的参数中指定)获取像素。

谢谢。

yap*_*s87 2

您可以使用 numpy 函数来实现您正在寻找的内容:

numpy.where(condition[, x, y])

链接中函数的详细说明:https://docs.scipy.org/doc/numpy-1.15.1/reference/ generated/numpy.where.html

在您的情况下,您希望它返回具有非零值的坐标。使用此方法,您可以在空数组上绘制任何内容,它将返回与非零对应的所有行和列。

它将返回满足您设置的条件的数组的索引。下面是显示用法示例的代码。

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()
Run Code Online (Sandbox Code Playgroud)