【OpenCV】使用OpenCV在Python中访问IP摄像头

代码如下。打开IP摄像头,获得局域网地址,使用VideoCapture方法读取。

import cv2 as cv

url = 'http://admin:psw@ip/video'  # 局域网地址
cap = cv.VideoCapture(url)  # 获取视频流
cv.namedWindow("frame", 0)  # 0为可调大小,注意:窗口名必须imshow里面的一窗口名一致
cv.resizeWindow("frame", 430, 270)  # 设置长和宽
while cap.isOpened():
    ret, frame = cap.read()  # 逐帧读取 返回第一个参数表示是否返回读取成功 第二个表示读取的帧
    if ret:
        print("success capture")
    # 调整窗口大小
    cv.namedWindow("frame", 0)  # 0可调大小,注意:窗口名必须imshow里面的一窗口名一致
    cv.imshow('frame', frame)  # 显示窗口
    if cv.waitKey(1) & 0xFF == ord('q'):  # 键盘输入q退出
        break
cap.release()  # 释放
cv.destroyAllWindows()  # 关闭所有窗口

  • 在64位计算机中,cv.waitKey()返回的是一个64位的整型数,在使用时需要将其与0xFF按位与运算,以获取低8位的结果。这是因为低8位表示键盘输入的ASCII码值,而高56位通常都是0,与其进行按位与运算后会忽略高位的数值,只保留低8位的值。

    如果不将返回值与0xFF进行按位与运算,则在某些情况下可能会导致程序无法正常退出或者产生其他异常。因此,建议在64位计算机上使用cv.waitKey(0) & 0xFF来获取键盘输入的ASCII码值。

  • 在使用cv2.VideoCapture类读取视频流或者本地视频文件时,需要调用release()方法释放资源。其主要作用是停止捕获视频帧,并且将视频流占用的内存等资源释放掉,以便其他应用程序能够访问它们。

你可能感兴趣的:(opencv)