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:\myPro\chepai\untitled\static\res\res_{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()  
posted @ 2021-10-13 12:33  清风_Z  阅读(264)  评论(0编辑  收藏  举报