0%

OpenCV Code Snippets

OpenCV 常用的代码片段

读取视频为帧数据

1
2
3
4
5
6
import cv2
import sys
cap = cv2.VideoCapture(fpath)
while(cap.isOpened()):
ret, frame = cap.read() # frame 中即为读取的图像数据,ret 表示是否读取成功
cap.release()

图像数据生成视频

1
2
3
4
5
6
fps = 30.0 # 定义帧率
out = cv2.VideoWriter("video_name.mp4", cv2.VideoWriter_fourcc(*'H264'), fps, (1920, 1080))
for frame in frame_list:
out.write(frame)
out.release()
out.close()

灰度拉伸

cv2.normalize(src[, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]]]) –> dst
设置 norm_type=cv2.NORM_MINMAX
alpha: 拉伸后的最小值
beta: 拉伸后的最大值
例如,拉伸到 0 到 255

1
dst = cv2.normalize(src=src, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX)

像素值的线性变换

cv2.convertScaleAbs(src[, dst[, alpha[, beta]]]) –> dst

\[ g(x)=\alpha \cdot f(x) + \beta \]

计算之后,大于 255 的值被截断到 255

填充 contours

关键点是 cv2.FILLED

1
cv2.drawContours(zeros, [np.array(c) for c in contours], -1, (255, 255, 255), cv2.FILLED)

直接使用内存中的数据

1
mat = cv2.imdecode(np.asarray(bytearray(open(f))), 1)