OpenCV python bitwise_and () ошибка сегментации кожи - PullRequest
0 голосов
/ 27 февраля 2020

Привет всем, я работаю над программой Skinsegmentation на Python с OpenCv, это код:


import cv2 as cv
import numpy as np



cap = cv.VideoCapture(0)

while(1):
    _, frame = cap.read()
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)

    #Establece los intervalos de el color de piel
    low_skin = np.array([0,5,0])
    up_skin = np.array([65,165,165])

    #Guarda esa matriz en mask
    mask = cv.inRange(hsv, low_skin, up_skin)
    #cv.imshow('Segmentacion',mask)

    #Lleva los pixeles de 255 a 1 para multiplicarlo despues
    _,mask = cv.threshold(mask,127,255,cv.THRESH_BINARY)

    #Erosion del frame
    element_E = cv.getStructuringElement(cv.MORPH_ELLIPSE, (2*5 + 1, 2*5+1), (5, 5))
    Ero = cv.erode(mask, element_E)

    #Dilatacion de los elemntos previa erosion
    element_D = cv.getStructuringElement(cv.MORPH_ELLIPSE, (2*11 + 1, 2*11 + 1), (11, 11))
    dil = cv.dilate(Ero, element_D)

    #Multiplica ambas matrices
    res = cv.bitwise_and(frame,frame,mask=mask)

    cv.imshow('Actual',res)
    cv.imshow('Salida',frame)
    print('Mask')
    print( mask.shape )
    print( mask.dtype )
    print('Dil')
    print( dil.shape )
    print( dil.dtype )


    k = cv.waitKey(30)
    if k == ord('q') or k == 27:
        break

cv.destroyAllWindows()
cap.release()


Проблема в том, что когда я пытаюсь использовать функцию bitwise_and с маской (которая Я беру из InRange) функцию, она работает, но мне нужно стереть и расширить эту маску, поэтому, когда все будет сделано, я пытаюсь применить функцию bitwise_and с «dil» res = cv.bitwise_and(frame,frame,dil=dil) и показать мне следующую ошибку:

  File "<stdin>", line 32, in <module>
TypeError: 'dil' is an invalid keyword argument for bitwise_and()

массивы dil и mask показывают, что у меня одинаковый размер и тип.

Что может быть не так? Спасибо за ваш ответ

Я работаю над windows

PD: У меня есть оригинальная рамка и маска

enter image description here

Когда я делаю функцию bitwise_and с этими двумя, она дает мне третий:

enter image description here

Но мне нужно сделать это с оригиналом и последний ("дил") ....

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

bitwise_and принимает 4 ключевых аргумента - источник1, источник2, целевое изображение и маска. Произошла ошибка TypeError, поскольку вы задаете аргумент ключевого слова по имени - dil=dil. OpenCV не распознает это, поэтому вы получаете ошибку TypeError. Может быть, вы хотите res = cv.bitwise_and(frame, frame, mask=dil)?

0 голосов
/ 27 февраля 2020
res = cv.bitwise_and(frame,frame,mask=dil)

не так ли? Не могли бы вы объяснить, что вы хотите сделать с матрицами?

Побитовое_ и объяснение.

...