OpenCV

2022-04-06

install

  • conda install -c conda-forge opencv: 包含 H264
  • pip install opencv-python

cv2

  • cv2.imread(<img>) : 读取图片
  • <img>.shape : 图像大小(返回元组(高, 宽, 像素的通道数)
  • .imshow() : 显示图片
  • .waitKey() : 值为 0 时,表示等任意键按下后关闭
  • selectROI : 画 ROI

预览

1
import cv2
2
# 图片预览
3
4
img = cv2.imread('test.jpg') # 打开图片
5
cv2.imshow('name', img) # 显示图片
6
cv2.waitKey(0) # 参数毫秒,为 0 则一直等待
7
cv2.destroyAllWindows() # 销毁所有窗口

视频写入

1
import cv2
2
3
cap = cv2.VideoCapture(rtsp_url)
4
# 获取视频分辨率
5
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
6
# 获取视频帧率
7
fps = int(cap.get(cv2.CAP_PROP_FPS))
8
# 设置视频格式
9
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
10
# 调用VideoWrite()函数
11
videoWrite = cv2.VideoWriter(f"{save_file}.mp4", fourcc, fps, size)
  • cv2.VideoWriter_fourcc() / cv2.cv.CV_FOURCC() :设置视频格式
    • cv2.cv.CV_FOURCC(‘P’, ‘I’, ‘M’, ‘1’) = MPEG-1 codec
    • cv2.cv.CV_FOURCC(‘M’, ‘J’, ‘P’, ‘G’) = motion-jpeg codec
    • cv2.cv.CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec
    • cv2.cv.CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec
    • cv2.cv.CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec
    • cv2.cv.CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec
    • cv2.cv.CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec
    • cv2.cv.CV_FOURCC(‘F’, ‘L’, ‘V’, ‘1’) = FLV1 codec

剪裁图片

1
# 通过 imread 打开图片后,直接进行处理
2
img = cv2.imread(image_file)
3
img = img[:height, :width]
  • img[]
    • 高开始(最上面为 0): 高结束
    • 宽开始: 宽结束

函数

  • retval, dst = threshold(src, thresh, maxval, type, dst=None)
    • src: 原图
    • thresh: 阈值
    • maxval: 最大值
    • dst: 处理后图像
    • type: 处理类型
      • cv.THRESH_BINARY: 二值处理
      • cv.THRESH_BINARY_INV: 反二值处理
      • cv.THRESH_TRUNC: 截断阈值化
      • cv.THRESH_TOZERO: 阈值化为 0
      • cv.THRESH_TOZERO_INV: 反阈值化为 0

设置

超时设置

1
import os
2
import cv2
3
4
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "timeout;5000"
5
cap=cv2.VideoCapture(self.__rtsp_url,cv2.CAP_FFMPEG)

参考