Loading... * **原文作者: ** 张书樵 * **原文链接:** [https://zhangshuqiao.org/2022-05/使用OpenCV进行星轨的后期处理/](https://zhangshuqiao.org/2022-05/%E4%BD%BF%E7%94%A8OpenCV%E8%BF%9B%E8%A1%8C%E6%98%9F%E8%BD%A8%E7%9A%84%E5%90%8E%E6%9C%9F%E5%A4%84%E7%90%86/ "使用 OpenCV 进行星轨的后期处理") * **版权声明: ** 本博客所有文章除特别声明外,均采用 [BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh) 许可协议。转载请注明出处! 在文章[鱼眼镜头与小行星特效](https://zhangshuqiao.org/2019-01/%E9%B1%BC%E7%9C%BC%E9%95%9C%E5%A4%B4%E4%B8%8E%E5%B0%8F%E8%A1%8C%E6%98%9F%E7%89%B9%E6%95%88/)中,笔者介绍了摄影师 Stephane Vetter 创作的一幅非常震撼的星轨照片。通过后期堆栈叠加的方式,将许多张连续拍摄的星空照片进行合成,即可得到星轨。这样的拍摄方式相比于 B 门曝光具有一些优势,例如可以避免拍摄过程中出现问题而前功尽弃,并且也有更多的数据用于后期处理。后期处理的软件也有很多选择,例如 Photoshop 的堆栈功能,或者著名的 [Startrails.exe](http://www.startrails.de/)。笔者也用 Python 和 OpenCV 写了一段星轨的后期处理代码,但此前一直没有机会实测一下效果。 ```python #!/usr/bin/env python3 import os import cv2 import numpy as np # 放置原始图片的路径 base = '/path/to/pictures' names = sorted(os.listdir(base)) out_img = 'star-trails.jpg' # 保存的图片文件名 out_video = 'star-trails.mp4' # 保存的视频文件名 fps = 24 # 保存视频的 FPS,可以适当调整 frameSize = (3840, 2160) # 视频的尺寸 # 需要先装 ffmepg: sudo apt install ffmepg fourcc = cv2.VideoWriter_fourcc(*'avc1') videoWriter = cv2.VideoWriter( out_video, fourcc, fps, frameSize) frame = None for name in names: if os.path.splitext(name)[1].lower() == '.jpg': print(name) path = os.path.join(base, name) curr = cv2.imread(path) if frame is None: frame = curr else: frame = np.maximum(frame, curr) # 图片需要缩放到与视频尺寸一致 videoWriter.write(cv2.resize(frame, frameSize, interpolation=cv2.INTER_AREA)) # 保存中间结果 cv2.imwrite(out_img, frame) videoWriter.release() ``` 最近几天天气都很不错,笔者终于可以填坑了。下图使用的拍摄参数是:焦距 17mm,光圈 f/4,ISO 1250,单张曝光时间 30s,连续拍摄了 240 张进行合成。 ![](https://zhangshuqiao.org/images/2022/05/star-trails.jpg) --- 参考文章:[star-stacker](https://github.com/lancemathias/star-stacker) 拓展阅读:[叠加法星轨的拍摄及后期方法](http://www.imgzone.cn/article-377-1.html) ``` 最后修改:2023 年 02 月 16 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏