学习OpenCV3(1.5)----海康威视网络摄像头调校特别篇
今天拿到了海康威视的网络摄像头型号:DS-2CD2xxx,其实昨天就拿到了,但因为这个摄像头没有配置电源线,实验室里也没有PoE设备,所以今天jd买的电源线到了才能使用。(这里吐槽一下上一个用这个摄像头的学长,买的电源适配器是25v-2A就是50w的适配器,摄像头标定的是12v-3w,我接上发现发烫很严重而且会自动宕机,只好自己先买一个)
今天连上电脑后,发现找不到密码,联系了学长也忘记了,只好自己重新设置。关注了海康威视的客户公众号,里面有个密码重置,这里很奇怪,不知道为什么注册海康威视的账号需要用到身份证。然后就是跟着流程很顺利地下载了400密码重置助手重置了密码。之后又按照摄像头的说明书物理按键重置了摄像头,然后发现这样居然还有重新设置密码,早知道就不走客服那条路了,还省得身份信息泄露。
我是直接用网线连接的计算机,在设置里,把识别到的这个网络适配器的ip改到和摄像头同一个子网就好。这下就能成功访问并看到视频流了。
然后就是通过OpenCV-Ptthon访问摄像头了,这里给出代码,网上其实有现成的
主要是加入了一个Canny的边缘检测
import cv2 as cv import numpy as np def get_canny_img(image): res = cv.Canny(image, 500, 200) res = cv.convertScaleAbs(res) return res if __name__ == \'__main__\': url = "rtsp://admin:123456@xxx.xxx.xxx.xxx/Streaming/Channels/1" cap = cv.VideoCapture(url) # cap.set(cv.CAP_PROP_BUFFERSIZE, 3) # cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc(\'M\', \'J\', \'P\', \'G\')) # cap.set(cv.CAP_PROP_FPS, 25) while True: flag, frame = cap.read() if not flag: break # res = get_canny_img(frame) res = frame cv.imshow("Canny_cam", res) if (cv.waitKey(1) >= 0): break
View Code
重点说一下犯蠢的地方,在设置好摄像头后我发现延迟很高,中文互联网和外网找了很久找到2个方法,还有一个是我自己想的
1.
# cap.set(cv.CAP_PROP_BUFFERSIZE, 3)
有说是因为VideoCapture总是读取缓存中的图像数据导致了延迟,所以用CAP_PROP_BUFFERSIZE来限制缓存大小
2.
# cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc(\'M\', \'J\', \'P\', \'G\'))
也有说是因为视频质量太高,所以需要降低质量来达到流畅
3.
# cap.set(cv.CAP_PROP_FPS, 25)
第三个是我自己猜测的原因,因为之前写播放视频的代码时没有注意播放帧率,导致了一秒一帧,所以以为是帧率原因
最终,原因其实是忘记修改cv.waitKey()的参数了,这个参数是wait key的时间(ms)所以改成4或4以下都可以(因为视频是25帧,所以4ms以下都行)