opencv

作者: 瘦不下去了 | 来源:发表于2018-11-19 20:23 被阅读0次

    opencv

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
    OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby的支持。

    1、图像读入:cv2.imread()

    import cv2
    # Load an color image in grayscale 12
    img = cv2.imread('3.png',4)# 读取图片,第一个参数表示图片的名字,第二个参数指定了所读取图片的颜色类型,
    # >0返回3通道彩色图;=0返回灰度图;<0返回原图(带alpha 通道)
    # flag=-1时,8位深度,原通道
    # flag=0,8位深度,1通道
    # flag=1,   8位深度  ,3通道
    # flag=2,原深度,1通道
    # flag=3,  原深度,3通道
    # flag=4,8位深度 ,3通道
    

    2、显示图像:cv2.imshow()

    cv2.imshow('image',img)# 显示图片 第一个参数是窗口的名字,第二个才是图片
    cv2.waitKey(0)# 等待时间,单位毫秒,一般与cv2.imshow()搭配使用
    # cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有
    # 键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的ASCII 码值,程序将会继续运行。如果
    # 没有键盘输入,返回值为-1,如果我们设置这个函数的参数为0,那它将会无限期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键a 是否被按下
    cv2.destroyAllWindows()
    # cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果
    # 你想删除特定的窗口可以使用cv2.destroyWindow(),在括号内输入你想删
    # 除的窗口名。
    

    3、保存图像:cv2.imwrite()

    cv2.imwrite('lena.png',img)
    # 保存一个图像。第一个参数是要保存的文件名,第二个参数是要保存的图像。可选的第三个参数,它针对特定
    # 的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是
    # 压缩级别。默认为3
    

    4、操作摄像头

    import cv2
    cv2.VideoCapture(0)
    # VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,
    # 如cap = cv2.VideoCapture("../test.avi")
    while(True):
    # Capture frame-by-frame
        ret, frame = cap.read()
        #  cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。 其中ret是布尔值,如果
        # 读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,
        # 是个三维矩阵。
    # Our operations on the frame come here 1
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 彩色图像转为灰度图像
    # Display the resulting frame
        cv2.imshow('frame',gray)
        if cv2.waitKey(1) & 0xFF == ord('q'):
        # 显示视频时,waitKey()延迟时间需要设置为 大于0的参数
        # 参数是1,表示延时1ms切换到下一帧图像,对于视频而言;
        # 参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;
        # 参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。
            break
        # 等待一秒并且如果键盘输入q,直接退出
    # When everything done, release the capture
    cap.release()# 内存释放
    cv2.destroyAllWindows()# 关闭所有的HighGUI窗口
    

    5、保存摄像头录像文件

    import cv2
    cap = cv2.VideoCapture(0)# 捕获图像流
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')# 使用mp4编码器
    out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (640, 480))
    #分别是:保存文件名、编码器、帧率、视频宽高
    while (cap.isOpened()):
        ret, frame = cap.read()
        if ret == True:
            frame = cv2.flip(frame, 0)
            # 第一个参数是图片,第二个是flipcode,flipcode控制翻转效果
            #flipcode = 0:沿x轴翻转
            # flipcode > 0:沿y轴翻转
            # flipcode < 0:x,y轴同时翻转
            out.write(frame)#  # 保存录像结果
            cv2.imshow('frame', frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
    cap.release()
    out.release()
    cv2.destroyAllWindows()
    

    6、图片上画出几何图形

    import numpy as np
    import cv2
    
    img = cv2.imread('2.jpg', 1)
    font = cv2.FONT_HERSHEY_SIMPLEX  # 使用默认字体
    cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)  # 画直线
    #        图片  起点    终点        颜色        线宽
    cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)
    # 画矩形    被画图片  起顶点    终顶点      颜色       线宽
    cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)
    # 画圆    被画图片   圆心    半径      颜色     线宽(-1代表内部涂满色)
    imge = cv2.putText(img, 'Hello world', (0, 400), font, 1.2, (128, 255, 76), 2)
    # 在图上写字     被写图  字的内容        起始位置  字体  大小 颜色      笔画宽
    cv2.imshow('ssimage', imge)
    cv2.waitKey(0)
    

    7、numpy.zeros(创建0矩阵)
    返回给定形状和类型的新数组,用零填充。

    numpy.zeros(shape, dtype=float, order=’C’)
    shape:int或ints序列
        新数组的形状,例如(2,3 )或2。
    dtype:数据类型,可选
        数组的所需数据类型,例如numpy.int8。默认值为 numpy.float64。
    order:{'C','F'},可选
    是否在存储器中以C或Fortran连续(按行或列方式)存储多维数据。
    
    import numpy as np
    a = np.zeros(5)
    a
    array([0., 0., 0., 0., 0.])
    # 创建一个一维数组,只使用一个参数就可以了 
    # 在默认情况下,zeros创建的数组是浮点型的
    b = np.zeros(5,np.uint8)
    b
    array([0, 0, 0, 0, 0], dtype=uint8)
    # 假如需要使用其他类型,可以设置dtype参数 
    c = np.zeros((5,2),np.uint8)
    c
    array([[0, 0],
           [0, 0],
           [0, 0],
           [0, 0],
           [0, 0]], dtype=uint8)
    d = np.zeros((5,2,3),np.uint8)
    d
    array([[[0, 0, 0],
            [0, 0, 0]],
    
           [[0, 0, 0],
            [0, 0, 0]],
    
           [[0, 0, 0],
            [0, 0, 0]],
    
           [[0, 0, 0],
            [0, 0, 0]],
    
           [[0, 0, 0],
            [0, 0, 0]]], dtype=uint8)
    d1 = np.zeros((5,3,4),np.uint8)
    d1
    array([[[0, 0, 0, 0],
            [0, 0, 0, 0],
            [0, 0, 0, 0]],
    
           [[0, 0, 0, 0],
            [0, 0, 0, 0],
            [0, 0, 0, 0]],
    
           [[0, 0, 0, 0],
            [0, 0, 0, 0],
            [0, 0, 0, 0]],
    
           [[0, 0, 0, 0],
            [0, 0, 0, 0],
            [0, 0, 0, 0]],
    
           [[0, 0, 0, 0],
            [0, 0, 0, 0],
            [0, 0, 0, 0]]], dtype=uint8)
    
    
    e = np.zeros((5,2,3,4),np.uint8)
    e
    array([[[[0, 0, 0, 0],
             [0, 0, 0, 0],
             [0, 0, 0, 0]],
    
            [[0, 0, 0, 0],
             [0, 0, 0, 0],
             [0, 0, 0, 0]]],
    
    
           [[[0, 0, 0, 0],
             [0, 0, 0, 0],
             [0, 0, 0, 0]],
    
            [[0, 0, 0, 0],
             [0, 0, 0, 0],
             [0, 0, 0, 0]]],
    
    
           [[[0, 0, 0, 0],
             [0, 0, 0, 0],
             [0, 0, 0, 0]],
    
            [[0, 0, 0, 0],
             [0, 0, 0, 0],
             [0, 0, 0, 0]]],
    
    
           [[[0, 0, 0, 0],
             [0, 0, 0, 0],
             [0, 0, 0, 0]],
    
            [[0, 0, 0, 0],
             [0, 0, 0, 0],
             [0, 0, 0, 0]]],
    
    
           [[[0, 0, 0, 0],
             [0, 0, 0, 0],
             [0, 0, 0, 0]],
    
            [[0, 0, 0, 0],
             [0, 0, 0, 0],
             [0, 0, 0, 0]]]], dtype=uint8)
    

    相关文章

      网友评论

          本文标题:opencv

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