美文网首页
海康威视摄像头

海康威视摄像头

作者: 邯山之郸 | 来源:发表于2021-01-29 18:14 被阅读0次

    设置

    • 关掉红外补光
    • 自动白平衡
    • 日夜转换为“白天”

    网线水晶头接法

    网线有两种做法,一种是交叉线,一种是平行(直通)线
    交叉线的做法是:一头采用568A标准,一头采用568B标准
    平行(直通)线的做法是:两头同为568A标准或568B标准,(一般用到的都是568B平行(直通)线的做法)
    568A标准:白绿 绿 白橙 蓝 白蓝 橙 白棕 棕
    568B标准:白橙 橙 白绿 蓝 白蓝 绿 白棕 棕

    numpy.sum()函数

    numpy.sum(a, axis=None, dtype=None, out=None, keepdims=np._NoValue)
    

    在参数列表中:
    a是要进行加法运算的向量/数组/矩阵
    axis的值可以为None,也可以为整数和元组
    其形参的注释如下:

    a : array_like elements to sum.
    

    axis的取值有三种情况:1.None,2.整数, 3.整数元组。
    (在默认/缺省的情况下,axis取None)
    如果axis取None,即将数组/矩阵中的元素全部加起来,得到一个和。

    白平衡

    白平衡,字面上的理解是白色的平衡。白平衡是描述[显示器]中红、绿、蓝三基色混合生成后白色精确度的一项指标。白平衡是[电视摄像]领域一个非常重要的概念,通过它可以解决[色彩还原]和[色调]处理的一系列问题。白平衡是随着电子影像再现色彩真实而产生的,在专业摄像领域白平衡应用的较早。家用电子产品(家用[摄像机]、数码照相机)中也广泛地使用,然而技术的发展使得[白平衡调整]变得越来越简单容易,但许多使用者还不甚了解白平衡的工作原理,理解上存在诸多误区。它是实现摄像机图像能精确反映被摄物的色彩状况,有手动白平衡和自动白平衡等方式。许多人在使用[数码摄像机]拍摄的时候都会遇到这样的问题:在[日光灯]的房间里拍摄的影像会显得发绿,在室内[钨丝灯]光下拍摄出来的景物就会偏黄,而在日光阴影处拍摄到的照片则莫名其妙地偏蓝,其原因就在于白平衡的设置上 。

    打开摄像头

    网卡IP地址需要和摄像头在一个ip段,才能访问。

    import cv2
    import numpy as np 
    
    def camera_show():
        url = "rtsp://admin:zxcvbnm123@192.168.121.8/Streaming/Channels/2" # 可以使用通道1或者2
        cap = cv2.VideoCapture(url)
        ret, frame = cap.read()
        while ret:
            ret, frame = cap.read()
            mtx=np.array([[939,0,638],[0,938,353],[0,0,1]])
            dist=np.array([-0.3947,0.1125,0,0,0])
            frame=cv2.undistort(frame,mtx,dist,None,None)# cv2.undistort(frame, mtx, dist, None, None)
            cv2.imshow("frame",frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        cv2.destroyAllWindows()
        cap.release()
    if __name__ == "__main__":
        
        camera_show()
        
    

    保存视频

    import cv2
    import numpy as np
    import time, datetime
    import sys
    def camera_record(fnamesave):
    
           """
           函数名:cv2.VideoCapture()
           功  能:通过摄像头捕获实时图像数据
           返回值:有
           参数一:摄像头代号,0为默认摄像头,笔记本内建摄像头一般为 0
                  或者填写视频名称直接加载本地视频文件
           """
           url = "rtsp://admin:zxcvbnm123@192.168.121.8/Streaming/Channels/2" # 可以使用通道1或者2
           cap = cv2.VideoCapture(url)  # 创建一个 VideoCapture 对象,打开摄像头
           time_begin = time.time()
           """
           函数名:cap.set( propId , value )
           功  能:设置视频参数。设置视频的宽高值和摄像头有关
                  使用笔记本内置摄像头时只能设置为 1280*720 以及 640*480,哪怕设置值不同时都会自动校正过来,并且仍然返回 True
           返回值:布尔值
           参数一:需要设置的视频参数
           参数二:设置的参数值
           """
           # cap.set(3, 480)
           # cap.set(4, 320)
    
           flag = 1;  # 设置一个标志,用来输出视频信息
           """
           函数名:cv2.isOpened()
           功  能:返回一个布尔值( True / False ),检查是否初始化成功,成功返回 True
           返回值:布尔值
           """
    
           # fourcc = cv2.VideoWriter_fourcc(*'XVID')#视频存储的格式
           # fourcc = cv2.VideoWriter_fourcc(*'MJPG')
           fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
           fps = cap.get(cv2.CAP_PROP_FPS)  # 帧率
           # 视频的宽高
           size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), \
                  int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
           
           # print(fnamesave)
           out = cv2.VideoWriter(fnamesave, fourcc, fps, size)  # 视频存储       
    
           while (out.isOpened()):  # 循环读取每一帧
                  """
                  函数名:cap.read()
                  功  能:返回两个值
                         先返回一个布尔值,如果视频读取正确,则为 True,如果错误,则为 False,也可用来判断是否到视频末尾
                         再返回一个值,为每一帧的图像,该值是一个三维矩阵
                         通用接收方法为:
                         ret,frame = cap.read();
                         这样 ret 存储布尔值,frame 存储图像
                         若使用一个变量来接收两个值,如
                         frame = cap.read()
                         则 frame 为一个元组,原来使用 frame 处需更改为 frame[1]
                  返回值:R1:布尔值
                         R2:图像的三维矩阵
                  """
                  if time.time()-time_begin > 3600:  # 3600秒,即一个小时
                         return 0
                  ret_flag, Vshow = cap.read()
                  # gray = cv2.cvtColor(Vshow,cv2.COLOR_BGR2GRAY)
                  # cv2.imshow("Gray",gray)
                  if ret_flag is False:  # ret为false则关闭
                         exit()
    
                  cv2.namedWindow('video', cv2.WINDOW_AUTOSIZE)  # 创建一个名为video的窗口
                  cv2.imshow("video", Vshow)  # 窗口显示,显示名为 Capture_Test
                  out.write(Vshow)  # 将捕捉到的图像存储
    
                  k = cv2.waitKey(1) & 0xFF  # 每帧数据延时 1ms,延时不能为 0,否则读取的结果会是静态帧
                  if k == ord('s'):  # 若检测到按键 ‘s’,打印字符串
                         """
                         函数名:cap.get( propId )
                         功  能:查询视频的参数
                         返回值:无
                         参数一:查询的视频参数,其中部分值可以使用 cap.set() 进行修改
                         """
                         print(cap.get(3))
                         print(cap.get(4))
    
                  elif k == ord('q'):  # 若检测到按键 ‘q’,退出
                         sys.exit(0)
                         break
    
           cap.release()  # 释放摄像头
           out.release()
           cv2.destroyAllWindows()  # 删除建立的全部窗口
    
    if __name__ == "__main__":
        while True:
           fname=datetime.datetime.now().strftime('outvideo%Y-%m-%d-%H') # 一个小时换一次文件名
           fdir = r'D:/'
           fnamesave = fdir+fname+r'.mp4'
           camera_record(fnamesave)
           
    
    

    查看所有参数

    import cv2
     
    url = "rtsp://admin:zxcvbnm123@192.168.121.8/Streaming/Channels/2" 
    #选择摄像头号,一般从 0 开始
    cap = cv2.VideoCapture(url)
     
    #先设置参数,然后读取参数
    for i in range(47):
        print("No.={} parameter={}".format(i,cap.get(i)))
     
    while True:
        ret, img = cap.read()
        cv2.imshow("input", img)
    # 按 ESC 键退出
        key = cv2.waitKey(10)
        if key == ord('q'):
            break
     
    cv2.destroyAllWindows() 
    cv2.VideoCapture(0).release()
    

    运行结果:

    
    No.=0 parameter=0.0
    No.=1 parameter=0.0
    No.=2 parameter=1.1111111111111112e-05
    No.=3 parameter=640.0
    No.=4 parameter=360.0
    No.=5 parameter=25.0
    No.=6 parameter=875967080.0
    No.=7 parameter=-2562047788015215.0
    No.=8 parameter=0.0
    No.=9 parameter=0.0
    No.=10 parameter=0.0
    No.=11 parameter=0.0
    No.=12 parameter=0.0
    No.=13 parameter=0.0
    No.=14 parameter=0.0
    No.=15 parameter=0.0
    No.=16 parameter=0.0
    No.=17 parameter=0.0
    No.=18 parameter=0.0
    No.=19 parameter=0.0
    No.=20 parameter=0.0
    No.=21 parameter=0.0
    No.=22 parameter=0.0
    No.=23 parameter=0.0
    No.=24 parameter=0.0
    No.=25 parameter=0.0
    No.=26 parameter=0.0
    No.=27 parameter=0.0
    No.=28 parameter=0.0
    No.=29 parameter=0.0
    No.=30 parameter=0.0
    No.=31 parameter=0.0
    No.=32 parameter=0.0
    No.=33 parameter=0.0
    No.=34 parameter=0.0
    No.=35 parameter=0.0
    No.=36 parameter=0.0
    No.=37 parameter=0.0
    No.=38 parameter=0.0
    No.=39 parameter=0.0
    No.=40 parameter=0.0
    No.=41 parameter=1.0
    No.=42 parameter=1900.0
    No.=43 parameter=0.0
    No.=44 parameter=0.0
    No.=45 parameter=0.0
    No.=46 parameter=808596553.0
    

    灰度求和

    import cv2
    import numpy as np
    path = r"C:\Users\Eddie\Pictures\QQplayerPic\\"
    filename = r"outvideo2021-01-29-1[00_00_03][20210129-191619].png"
    image = cv2.imread(path+filename) #读取图像
    (b,g,r) = image[0,0] #读取(0,0)像素,Python中图像像素是按B,G,R顺序存储的
    print("位置(0,0)处的像素 - 红:%d,绿:%d,蓝:%d" %(r,g,b)) #显示像素值
    
    image[0,0] = (100,150,200)#更改位置(0,0)处的像素
    
    (b,g,r) = image[0,0]#再次读取(0,0)像素
    print("位置(0,0)处的像素 - 红:%d,绿:%d,蓝:%d" %(r,g,b))#显示更改后的像素值
    
    corner = image[0:100,0:100]#读取像素块
    print(corner.shape)
    cv2.imshow("Corner",corner)#显示读取的像素块
    a = np.sum(corner)/255
    image[0:100,0:100] = (0,255,0);#更改读取的像素块
    b = np.sum(corner)/255
    print("a:",a)
    print("b:",b)
    cv2.imshow("Updated",image)#显示图像
    
    cv2.waitKey(0)#程序暂停
    

    相关文章

      网友评论

          本文标题:海康威视摄像头

          本文链接:https://www.haomeiwen.com/subject/hmcctltx.html