2015-09-06 7 views
3

Я получаю эту ошибку:OpenCV ERROR - <unknown> не NumPy массив

<unknown> is not a numpy array 

при выполнении этого кода:

import cv2 
import numpy as np 

try: 

    cap = cv2.VideoCapture(0) 

    while (cap.isOpened()): 
     ret,img=cap.read() 
     cv2.imshow('output',img) 
     img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
     cv2.imshow('gray_scale',img2) 
     imgthreshold=cv2.inRange(img,cv2.cv.Scalar(3,3,125),cv2.cv.Scalar(40,40,255),) 
     cv2.imshow('thresholded',imgthreshold) 

     k=cv2.waitKey(10) 
     if k==27: 
      break 

    cap.release() 
    cv2.destroyAllWindows() 


except Exception as inst: 

    cap.release() 
    cv2.destroyAllWindows() 
    print("Eroor!!") 
    print(inst) 
    raise 

Вот отслеживающий:

Traceback (most recent call last): 
    File "C:\Users\... ...\camara.py", line 14, in <module> 
     imgthreshold=cv2.inRange(img,cv2.cv.Scalar(3,3,125),cv2.cv.Scalar(40,40,255),) 
TypeError: <unknown> is not a numpy array 

Я надеюсь, что вы может помочь мне решить эту проблему. Я уже проверить все зависимости, и они прекрасно работают также, если удалить строку

imgthreshold=cv2.inRange(img,cv2.cv.Scalar(3,3,125),cv2.cv.Scalar(40,40,255),) 

и следующий, программу работы без проблем

+0

У вас есть запятая в конце вашего 'cv2.inRange (...) 'function call, превращая три аргумента в один кортеж. Попробуйте удалить эту запятую. – Evert

+0

@Evert, добавление конечной запятой в вызов функции не приведет к тому, что аргументы будут упакованы в один кортеж. – donkopotamus

+0

Спасибо за ответ, но он не сработал, проблема остается такой же. –

ответ

1

Вам необходимо проверить статус, возвращаемый функцией VideoCapture::read. Он возвращает логический флаг, указывающий, действительно ли возвращенное изображение действительно.

import cv2 
import numpy as np 

try: 

    cap = cv2.VideoCapture(0) 

    while (cap.isOpened()): 
     ret,img=cap.read() 
     if not ret: 
      continue 

     cv2.imshow('output',img) 
     img2=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
     cv2.imshow('gray_scale',img2) 
     imgthreshold=cv2.inRange(img,cv2.cv.Scalar(3,3,125),cv2.cv.Scalar(40,40,255),) 
     cv2.imshow('thresholded',imgthreshold) 

     k=cv2.waitKey(10) 
     if k==27: 
      break 

    cap.release() 
    cv2.destroyAllWindows() 


except Exception as inst: 

    cap.release() 
    cv2.destroyAllWindows() 
    print("Eroor!!") 
    print(inst) 
    raise 
+0

Функция VideoCapture работает без проблем, так как я говорю, если вы удаляете строку проблем, программа show tow отображает с правильным захватом изображения –

1

Я нашел решение, это преобразовать главные параметры цвета, чтобы найти в Numpy массив ->

imgthreshold=cv2.inRange(img,np.array(cv2.cv.Scalar(3,3,125)),np.array(cv2.cv.Scalar(40,40,255)),) 

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

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