pythonopencvimage-processingip-camerahikvision

Connecting to Hikvision Camera using python and open cv


i want to Connect Hikvision ip camera with python and open cv using this code :

import numpy as np
import cv2

cap = cv2.VideoCapture()
cap.open("rtsp://yourusername:yourpassword@172.16.30.248:555/Streaming/channels/2/")

while(True):
     # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',ret)

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

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

when i run my code i got this Error :

    Traceback (most recent call last):
  File "C:\Users\Amin\Desktop\ip camera in py\csm.py", line 15, in <module>
    cv2.imshow('frame',ret)
cv2.error: OpenCV(4.0.0) c:\projects\opencv-python\opencv\modules\imgproc\src\color.hpp:261: error: (-2:Unspecified error) in function '__cdecl cv::CvtHelper<struct cv::Set<1,-1,-1>,struct cv::Set<3,4,-1>,struct cv::Set<0,2,5>,2>::CvtHelper(const class cv::_InputArray &,const class cv::_OutputArray &,int)'
> Unsupported depth of input image:
>     'VDepth::contains(depth)'
> where
>     'depth' is 6 (CV_64F)

i test my camera whit VLCPlayer and it work perfectly!

i think the problem refer to opencv4!

how can i fix it? tnx a lot


Solution

  • The error is you are passing a BOOLEAN value instead a Mat value in imshow() function of OpenCV here:

    cv2.imshow('frame',ret)
    

    So you should pass the frame:

    cv2.imshow('frame',frame)
    

    cap.read() in Python returns two values, one is Boolean which shows whether or not the frame was successfully read, and the second one is the frame itself. So you should check for the ret if it is true, then show the frame.