• opencv使用


    一. 打开图片,旋转图片, 保存图片

    import cv2
    
    
    img = r'./3.jpg'
    g_res = api_call(img, 'general', 'chinese_print')
    angle = g_res['data']['json']['general_ocr_res']['rotate_angle']
    print(g_res)
    print(angle)
    # 纠正原图
    img_array = cv2.imread(img)  # 路径不带中文
    # img_array = cv2.imdecode(np.fromfile(img, dtype=np.uint8), -1)  # 路径带中文
    if angle == 90:
        img_array = cv2.rotate(img_array, cv2.ROTATE_90_COUNTERCLOCKWISE)
        elif angle == -90:
        img_array = cv2.rotate(img_array, cv2.ROTATE_90_CLOCKWISE)
        elif angle == 180:
        img_array = cv2.rotate(img_array, cv2.ROTATE_180)
    
    cv2.imwrite(img, img_array)  # 保存路径不带中文
    # cv2.imencode('.jpg', img_array)[1].tofile(img)  # 保存路径带中文

    二. python-opencv中cv2.VideoCapture(),read(),waitKey()的使用

    1、cap = cv2.VideoCapture(0)
    VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,如cap = cv2.VideoCapture("…/test.avi")

    #计算当前位置在视频中是多少毫秒temp1=cap.get(cv2.CAP_PROP_POS_MSEC)
    #计算视频的高temp2=cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
    #计算视频的宽temp3=cap.get(cv2.CAP_PROP_FRAME_WIDTH)
    #得到视频的帧率temp4=cap.get(cv2.CAP_PROP_FPS)
    #得到视频的编码方式temp5=cap.get(cv2.CAP_PROP_FOURCC)
    #得到视频的总帧数temp6=cap.get(cv2.CAP_PROP_FRAME_COUNT)

    2、摄像头初始化成功
    videoCapture.isOpened()
    返回True即成功

    3、ret,frame = cap.read()
    cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。

    4.保存视频
    cv2.imwrite(savepath, frame)

    5、cv2.waitKey(1),waitKey()方法本身表示等待键盘输入,
    参数是1,表示延时1ms切换到下一帧图像,对于视频而言
    参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停

    6、调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。
    videoCapture.release()
    cv2.destroyAllWindows()

    示例:

    def vid_img(vid_path):
        """ 提取视频中的某些帧,返回图片字节流列表
        帧率:每秒中的帧数,一帧:视频中一副静止的画面"""
        vidcap = cv2.VideoCapture(vid_path)
        fps = vidcap.get(cv2.CAP_PROP_FPS)  # 得到视频帧率fps
        temp6 = vidcap.get(cv2.CAP_PROP_FRAME_COUNT)  # 得到视频总帧数
        print(fps, temp6)
        success, image = vidcap.read()
        # print(success)
        # print(image)
        img_bytes_li = []
        count = 0
        while success:
            if count % int(fps * 3) == 0:  # 每三秒取一帧
                temp1 = vidcap.get(cv2.CAP_PROP_POS_MSEC)  # 计算当前位置在视频中是多少毫秒
                print(temp1)
                # cv2.imwrite(rf'D:myProchepaiuntitledstatic
    es
    es_{count}.jpg', image)  # save frame as JPEG file
                img_bytes = cv2.imencode('.jpg', image)[1].tobytes()
                img_bytes_li.append(img_bytes)
            success, image = vidcap.read()
            # print('Read a new frame: ', success)
            count += 1
        return img_bytes_li

    示例二:

    用OpenCV调用IP摄像头

    #再将以下代码重新运行一下
    import cv2
    url = 'rtsp://admin:password@192.168.1.104:554/11'
    cap = cv2.VideoCapture(url)
    while(cap.isOpened()):  
        # Capture frame-by-frame  
        ret, frame = cap.read()  
        # Display the resulting frame  
        cv2.imshow('frame',frame)  
        if cv2.waitKey(1) & 0xFF == ord('q'):  
            break  
    # When everything done, release the capture  
    cap.release()  
    cv2.destroyAllWindows()  
  • 相关阅读:
    ztree : 增删改功能demo与自定义DOM功能demo的结合
    CF786B Legacy 线段树优化建图
    UVA11992 Fast Matrix Operations 一次开多棵线段树
    P3950 部落冲突 树链剖分
    洛谷P1471 方差 线段树维护区间方差
    2019.7.26 T1 树剖+双标记
    P1505 [国家集训队]旅游
    NOIP2015 运输计划 树上差分+树剖
    P1373 小a和uim之大逃离 四维dp,维护差值
    Pyhton之subprocess模块和configparser模块
  • 原文地址:https://www.cnblogs.com/zwq-/p/15401630.html
Copyright © 2020-2023  润新知