OpenCV findContours находит только границу изображения

Я работаю над проектом по отслеживанию лазера и фотодиода с камерой, подключенной к Raspberry Pi. Pi отправит инструкции на Arduino, который переориентирует лазер, пока я не получу ответ от фотодиода. Прямо сейчас я работаю над камерой.

Я пытаюсь найти контуры своего изображения, чтобы сопоставить их с общими контурами объектов, которые я буду использовать, но мой findContours () дает мне только границу моего изображения.

Хотел бы я публиковать изображения, но у меня недостаточно репутации. Canny Edge - это черно-белые линии с черным фоном. Изображение с контурами на нем является захваченным изображением, но с нарисованной рамкой и без других контуров.

Вот мой код:

def DED(grayImg):                           #Edge Detection, returns image array

    minInt, maxInt, minLoc, maxLoc = cv2.minMaxLoc(grayImg) #Grayscale: MinIntensity, Max, and locations
    beam = cv2.mean(grayImg)    #Find the mean intensity in the img pls.
    mean = float(beam[0])
    CannyOfTuna = cv2.Canny(grayImg, (mean + minInt)/2, (mean + maxInt)/2)  #Finds edges using thresholding and the Canny Edge process.

    return CannyOfTuna


def con2z(Gray, ogImage):                           #Find contours from = Canny Edge Image, draw onto original
    lines, pyramids = cv2.findContours(Gray, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)


    gimmeGimme = cv2.drawContours(ogImage, lines, -1, (128,255,0), 3)       #draw contours on 
                #The -1 signifies ALL contours will be drawn.

    return lines

with picamera.PiCamera() as camera:
    camera.resolution = (640,480)
    out = camera.capture('output.jpg')                  # Camera start
    output = cv2.imread('output.jpg')

    grayput = cv2.cvtColor(output, cv2.COLOR_BGR2GRAY)      #Grayscale
    cv2.imwrite('gray.jpg', grayput)

    cans = DED(grayput)                                     #Canny Edge
    cv2.imwrite('Canny.jpg', cans)


    lines = con2z(grayput, output)                      # Contours please

    print(lines)
    cv2.imwrite('contours.jpg', output)

РЕДАКТИРОВАТЬ: Вот две фотографии: http://imgur.com/EVeMVdm,QLoYa2o#0 http://imgur.com/EVeMVdm,QLoYa2o#1


person David Tran    schedule 26.06.2015    source источник
comment
Если вы разместите изображения в Интернете и добавите ссылки в свой вопрос, кто-то добавит изображения за вас.   -  person beaker    schedule 26.06.2015


Ответы (1)


findContours возвращает этот кортеж (изображение, контуры, иерархия). Итак, в вашем случае попробуйте это как L.H.S вашей функции findContours: _, lines, pyramids = cv2.findContours

РЕДАКТИРОВАТЬ:
Извините, это не было решением, одно из нижеприведенных сработало для меня.
Замените grayput банками в вызове функции con2z. findContours ожидает двоичного изображения, чего нет в Grayput.

person Fourierist    schedule 26.06.2015
comment
Это тот формат, который у меня был изначально, но когда у меня было 3 термина для LHS, я получил ошибку: ValueError: нужно более 2 значений для распаковки - person David Tran; 29.06.2015
comment
Ах, шлепки. Спасибо, что поймали мою ошибку! Я хотел использовать изображение Canny Edge - person David Tran; 29.06.2015