imgHsv = cv2.cvtColor (img, cv2.COLOR_BGR2HSV) cv2.error: OpenCV (4.0.0) - PullRequest
0 голосов
/ 15 января 2020

Я пытался запустить определение цвета на моей веб-камере с помощью OpenCV, и он продолжает получать ошибку, как показано в заголовке и ниже:

 imgHsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

Код, который я хотел запустить is:

import cv2
import numpy as np

frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture(1)
cap.set(3, frameWidth)
cap.set(4, frameHeight)

def empty(a):
    pass

cv2.namedWindow("HSV")
cv2.resizeWindow("HSV",640,240)
cv2.createTrackbar("HUE Min","HSV",0,179,empty)
cv2.createTrackbar("HUE Max","HSV",179,179,empty)
cv2.createTrackbar("SAT Min","HSV",0,255,empty)
cv2.createTrackbar("SAT Max","HSV",255,255,empty)
cv2.createTrackbar("VALUE Min","HSV",0,255,empty)
cv2.createTrackbar("VALUE Max","HSV",255,255,empty)

while True:

    _, img = cap.read(0)
    imgHsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

    h_min = cv2.getTrackbarPos("HUE Min","HSV")
    h_max = cv2.getTrackbarPos("HUE Max", "HSV")
    s_min = cv2.getTrackbarPos("SAT Min", "HSV")
    s_max = cv2.getTrackbarPos("SAT Max", "HSV")
    v_min = cv2.getTrackbarPos("VALUE Min", "HSV")
    v_max = cv2.getTrackbarPos("VALUE Max", "HSV")
    print(h_min)

    lower = np.array([h_min,s_min,v_min])
    upper = np.array([h_max,s_max,v_max])
    mask = cv2.inRange(imgHsv,lower,upper)
    result = cv2.bitwise_and(img,img, mask = mask)

    mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
    hStack = np.hstack([img,mask,result])
    cv2.imshow('Original', img)
    cv2.imshow('HSV Color Space', imgHsv)
    cv2.imshow('Mask', mask)
    cv2.imshow('Result', result)
    cv2.imshow('Horizontal Stacking', hStack)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

Я не уверен, является ли это проблемой версии OpenCV или чем-то связанным с кодом или чем-то. Есть идеи?

1 Ответ

1 голос
/ 15 января 2020

Возможная проблема № 1: Настройки кулачка

  • Нажмите Windows Key, введите camera. Нажмите на Camera privacy settings.

    wide demo pic

  • На открывшемся экране убедитесь, что Allow apps to access your camera включено.

    wide demo pic

Теперь повторите попытку с вашим кодом!

Возможная проблема № 2: Неверный индекс

Найдите индекс камеры:

max_cam_number = 10
for i in range(-1, max_cam_number):
    cap = cv2.VideoCapture(i)
    test, frame = cap.read()
    if test:
        print("i : "+str(i)+" /// result: "+str(test))

В большинстве случаев, если вы используете веб-камеру вашего ноутбука, вам следует попробовать 0 :

cap = cv2.VideoCapture(0)
...