2017-01-24 28 views
1

В настоящее время я работаю на Python для определения цвета на одном изображении. После загрузки моего изображения и создания моего RGB (или BGR в CV2), я использую следующие 2 строки для создания маски и выходного изображения.Python Open CV2 Маска обнаружения цвета для пиксельных координат

mask = cv2.inRange(image, lower, upper) 
output = cv2.bitwise_and(image, image, mask = mask) 

Затем код отображает следующее изображение.

Output of my color detection

Но теперь, я хотел бы взять обработанное изображение и извлечение пиксельных координат точек для зеленой линии.

Спасибо. Любая помощь будет оценена по достоинству.

+0

Чтобы было ясно, у вас есть изображение, которое вы разместили, и вы хотите, чтобы координаты пикселей в зеленой линии? (ваш фрагмент кода меня немного сбивает с толку, это не часть проблемы, не так ли?) – Soltius

+0

Изображение, которое вы разместили, является исходным изображением рядом с результатом, не так ли? – Soltius

ответ

0

Мое решение не так аккуратно, но вы можете уточнить его позже.

Я нарисовал линию поперек черного изображения:

enter image description here

И я получен значения координат этих пикселей в белом. Я взял два массива для их хранения.

Код:

listi = [] #---stores coordinate corresponding to height of the image 
listj = [] #---stores coordinate corresponding to width of the image 

for i in range(0, mask.shape[0]): 
    for j in range(0, mask.shape[1]): 
     if(mask[i, j] == 255): 
      listi = np.append(listi, i) 
      listj = np.append(listj, j) 

Я знаю, что есть гораздо лучше там. Я уточню этот ответ, когда узнаю.

0

Итак, как насчет findNonZeros() на двоичной версии вашего изображения? Начиная с изображением с зеленой линии на черном фоне:

import cv2 
import numpy as np 

img=cv2.imread(output.png) 
img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #converting to grayscale 
img=so.astype(np.uint8) 

#get all non zero values 
coord=cv2.findNonZero(img) 

EDIT: Это было отмечено на другой вопрос, что вы можете также использовать функцию ненулевых Numpy в. Он дает те же результаты, но я нахожу его более медленным.

import cv2 
import numpy as np 
import time 

so=cv2.imread(your_image,0) 

start1=time.clock() 
coord=cv2.findNonZero(so) 
end1=time.clock() 

start2=time.clock() 
coord2=np.nonzero(so) 
end2=time.clock() 

print("cv2.findNonZeros() takes "+str(end1-start1)+" seconds.") 
print("np.nonzero() takes  "+str(end2-start2)+" seconds.") 

>>> cv2.findNonZeros() takes 0.003266 seconds. 
>>> np.nonzero() takes  0.021132 seconds. 

 Смежные вопросы

  • Нет связанных вопросов^_^