Open Cv Error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

十年热恋 提交于 2019-11-26 08:38:07

问题


Currently using Windows 10 with Python 3.7 I tried running with this code in order to get the webcam to function for use in number recognition

def get_img_contour_thresh(img):
   x, y, w, h = 0, 0, 300, 300
   gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
   blur = cv2.GaussianBlur(gray, (5, 5), 0)
   ret, thresh1 = cv2.threshold(blur, 175, 255, cv2.THRESH_BINARY_INV + 
     cv2.THRESH_OTSU)
   thresh1 = thresh1[y:y + h, x:x + w]
   contours, hierarchy = cv2.findContours(thresh1, cv2.RETR_TREE, 
     cv2.CHAIN_APPROX_SIMPLE)[-2:]
   return img, contours, thresh1

def show_webcam(mirror=False):
   # load json and create model
   json_file = open(\'model.json\', \'r\')
   loaded_model_json = json_file.read()
   json_file.close()
   model = model_from_json(loaded_model_json)
   # load weights into new model
   model.load_weights(\"model.h5\")
   print(\"Loaded model from disk\")

model.compile(loss=\'categorical_crossentropy\',
              optimizer=\'adam\',
              metrics=[\'accuracy\'])

cap = cv2.VideoCapture(0)
while True:
    ret, img = cap.read()
    img, contours, thresh = get_img_contour_thresh(img)
    ans = \'\'


    if len(contours) > 0:
        contour = max(contours, key=cv2.contourArea)
        if cv2.contourArea(contour) > 500:
            x, y, w, h = cv2.boundingRect(contour)
            newImage = thresh[y:y + h, x:x + w]
            newImage = cv2.resize(newImage, (28, 28))
            newImage = np.array(newImage)
            newImage = newImage.astype(\'float32\')
            newImage /= 255

            if K.image_data_format() == \'channels_first\':
                newImage = newImage.reshape(1, 28, 28)
            else:
                newImage = newImage.reshape(28, 28, 1)
            newImage = np.expand_dims(newImage, axis=0)
            ans = model.predict(newImage).argmax()


    x, y, w, h = 0, 0, 300, 300
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(img, \"CNN : \" + str(ans), (10, 320),
                cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
    cv2.imshow(\"Frame\", img)
    cv2.imshow(\"Contours\", thresh)     


    if cv2.waitKey(1) & 0xFF == ord(\'q\'):
        break
cap.release()
cv2.destroyAllWindows()


def main():
   show_webcam(mirror=True)


if __name__ == \'__main__\':
   main()

I receive this error

 File \"cam.py\", line 75, in <module>
   main()
 File \"cam.py\", line 71, in main
   show_webcam(mirror=True)
 File \"cam.py\", line 34, in show_webcam
   img, contours, thresh = get_img_contour_thresh(img)
 File \"cam.py\", line 10, in get_img_contour_thresh
   gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 cv2.error: OpenCV(3.4.4) C:\\projects\\opencv- 
   python\\opencv\\modules\\imgproc\\src\\color.cpp:181: error: (-215:Assertion 
   failed) !_src.empty() in function \'cv::cvtColor\'

Iv been looking for a solution for a while but havent had any luck in figuring this out, tried looking around but just cant figure it out, what do you guys think? Appreciate the help given


回答1:


The error you're seeing is one that happens if None gets passed on cv2.cvtColor.

After

ret, img = cap.read()

it's a good idea to check that img is not None before proceeding. Depending on your input source, cap.read() can fail. One one my laptops, it fails at least once before starting to return valid images.



来源:https://stackoverflow.com/questions/54121013/open-cv-error-215assertion-failed-src-empty-in-function-cvcvtcolor

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!