2016-07-28 5 views
0

Я работаю с Хью Кругом Transform с моим RaspberryPi и когда я беру ROI, чтобы проверить круг, как это:OpenCV Хаф Круг Transform потребность 8-битное изображение

for (x,y,w,h) in trafficLights: 
    cv2.rectangle(image,(x,y),(x+w,y+h),(0,0,255),2) 
    roi = image[y:y+h,x:x+w] 
    roi = cv2.medianBlur(roi,5) 

    circles = cv2.HoughCircles(roi,cv2.HOUGH_GRADIENT,1,20, 
         param1=50,param2=60,minRadius=0,maxRadius=0) 
    circles = numpy.uint16(numpy.around(circles)) 

    for i in circles[0,:]: 
     if i[2] < 100: 
      cv2.circle(image,(i[0],i[1]),i[2],(0,255,0),2) 
      cv2.circle(image,(i[0],i[1]),2,(0,0,255),3) 
      if i[1] > 315: 
       print "Green Light" 
      else: 
       print "Red Light" 

Я получаю эту ошибку

The source image must be 8-bit, single-channel in function cvHoughCircles 

enter image description here Как я могу преобразовать ROI стать 8-битное изображение или же ошибка означает, что-то еще

Спасибо заранее!

Edit:

enter image description here

+1

вы можете преобразовать 'изображение' в оттенки серого. Используйте 'cv2.cvtColor (..., COLOR_BGR2GRAY)' – Miki

+0

@Miki Когда я использую изображение с серой шкалой, это дает мне еще одну ошибку. Я обрисовал свой вопрос с изображением. – Loanb222

+0

@Miki Он все еще дает ту же ошибку с раундом. – Loanb222

ответ

0

Спасибо Мики и bpachev за помощь!

Первая ошибка означает, что вам нужно, чтобы преобразовать его в оттенки серого, как этот

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 

и ошибка NoneType означает, что не было найдено ни одной окружности так, чтобы advoid ошибку вы можете добавить это, если заявление

if circles is not None: 
    circles = numpy.round(circles[0, :]).astype("int") 

Тогда, когда не было найдено ни одного круга, где я знал, что были круги, мне пришлось поиграть с настройками детектора.