gpt4 book ai didi

python - 延时图像的亮度/直方图归一化

转载 作者:行者123 更新时间:2023-12-02 16:30:17 26 4
gpt4 key购买 nike

我在实验室工作,我们经常制作干细胞随时间推移的序列(每小时拍摄一次)。当前的想法是将所有帧放在一起,并制作一个视频来显示这个不断增长的细胞(类似于youtube video)。使用OpenCV + Python可以做到简单而又酷。

import numpy as np
import os
import cv2

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

timelapse_folder = '../myTimeLapse/'

for file in os.listdir(timelapse_folder):
frame = cv2.imread(timelapse_folder+file, 0)
out.write(frame)

out.release()

但是我们有一个问题,所有图像的亮度都有些许差异,因此我们的输出视频中有些闪烁。

我不允许上传视频,但以下是一些使用gimp生成的简单示例,以可视化该问题:

那是我从帧中得到的视频

enter image description here

这就是我想要的视频(将闪烁最小化而不是完全消除也很不错)

enter image description here

有没有一种方法可以调整所有图像(或2张图像之间)的直方图或亮度,以消除使用OpenCV产生的闪烁?

感谢您的每一个想法或提示!

编辑:安德鲁的想法产生的gif序列(下面的答案)

enter image description here

最佳答案

如果您的数据位于3D阵列中,则无需遍历该数据即可。使用5张256 x 256的图像,您应该能够构造一个arr.shape == (256, 256, 5)的数组。我的最初评论与我想的略有出入,但下面的示例应该可以实现。

target_array = []

for file in os.listdir(timelapse_folder):
frame = cv2.imread(timelapse_folder+file, 0)
if target_array:#Not entirely happy with this, but it should work
target_array = np.dstack((target_array, frame))
elif not target_array:
target_array = np.asarray(frame)
target_array = target_array / np.max(target_array)
#target_array *= 255 #If you want an intensity value with a more common range here
for idx in xrange(target_array.shape[2]):
out.write(target_array[:, :, idx])

编辑:
我使用 this page解决了3D阵列的一些问题

关于python - 延时图像的亮度/直方图归一化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39363183/

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