OpenCV получает пиксели по кругу

Я новичок в 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 ()).

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
3 614
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()

Ваш метод не работает для цветных изображений. Но, используя ваш метод, я понял, что могу создать маску с нулевыми значениями, а затем использовать cv2.circle () для ее рисования. Затем я могу использовать функцию np.where (), чтобы найти координаты! Спасибо, в любом случае!

Steven97102 23.11.2018 14:21

извините, я исправлю код, чтобы включить цвет

yapws87 23.11.2018 14:31

Другие вопросы по теме