OpenCV获取圆圈上的像素

问题描述 投票:0回答:1

我是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()的参数中指定)获取像素。

谢谢。

python-3.x opencv3.0
1个回答
1
投票

您可以使用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()
© www.soinside.com 2019 - 2024. All rights reserved.