gpt4 book ai didi

python - 如何在 OpenCV Python 中将偏色应用于视频帧?

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:03 26 4
gpt4 key购买 nike

我对图像处理和 OpenCV 还很陌生。我正在研究一个帮助函数来帮助调整一些关键帧检测参数。

如果该帧是一组检测到的帧的成员,我希望能够将(戏剧性的)色偏应用于视频帧,这样我就可以使用此功能播放视频并查看哪些帧被检测为每个类的成员。

下面的代码将简单地“保存”一个框架,如果它是其中一个类的成员的话,我使用了 getting started with video 中的一个简单方法。 OpenCV-python 教程以灰度显示一个类的成员,但由于我有多个类,我需要能够将一个类与另一个类区分开来,所以我希望能够将醒目的色偏应用于信号成员其他类。

我还没有看到任何教授使用 OpenCV 进行简单颜色调整的内容,任何帮助将不胜感激!

import cv2


def play_video(video, frames_class_a=None, frames_class_b=None, frames_class_c=None):
"""plays a video, holding and color-coding certain frames
"""
if frames_class_a is None:
frames_class_a = []
if frames_class_b is None:
frames_class_b = []
if frames_class_c is None:
frames_class_c = []

cap = cv2.VideoCapture(video)
i = 0
while(cap.isOpened()):
ret, frame = cap.read()
if not ret:
break

if i in frames_class_a:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', gray)
if cv2.waitKey(600) & 0xFF == ord('q'):
break
elif i in frames_class_b:
cv2.imshow('frame', frame) # apply "green" cast here
if cv2.waitKey(600) & 0xFF == ord('q'):
break
elif i in frames_class_c:
cv2.imshow('frame', frame) # apply "red" cast here
if cv2.waitKey(600) & 0xFF == ord('q'):
break
else:
cv2.imshow('frame', frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
i = i + 1

cap.release()
cv2.destroyAllWindows()

最佳答案

我想到了两个简单的选项。

让我们从这段代码开始:

import cv2
import numpy as np

frame = cv2.imread('lena3.png')
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

选项1

创建一个与 frame 形状相同的空白 3 channel 图像。 numpy.zeros_like非常适合这份工作。

然后,将您的灰度图像分配给一个或两个 channel 。例如,要获得蓝色阴影的结果,可以使用以下代码。

result = np.zeros_like(frame)
result[...,0] = gray
cv2.imwrite('shaded_lena.png', result)

生成如下图:

Blue Lena

选项 2

另一种选择是创建一个相同形状的临时单 channel 空白图像,然后使用 cv2.merge 将其与灰度图像组合。

以下代码显示了所有可能的组合:

blank = np.zeros_like(gray)

shaded = [
cv2.merge([gray, blank, blank])
, cv2.merge([blank, gray, blank])
, cv2.merge([blank, blank, gray])
, cv2.merge([gray, gray, blank])
, cv2.merge([gray, blank, gray])
, cv2.merge([blank, gray, gray])
]

cv2.imwrite('shaded_lena_all.png', np.hstack(shaded))

制作这个(堆叠起来以便于显示):

Lenas of all shades

关于python - 如何在 OpenCV Python 中将偏色应用于视频帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53709639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com