海康威视摄像头

2021-01-29  本文已影响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)#程序暂停
上一篇下一篇

猜你喜欢

热点阅读