基于opencv的视频乐谱重建,现在支持横向滚动的乐谱图像。
使用范例视频link来进行效果展示。 
可以通过调节command.py前面的参数并运行它来一次性执行下列所有文件,或者只执行部分文件。整个程序组使用config文件来传参,仅调节参数时可将所有执行变量设为Fause。
运行前必须调节的变量如下:
- capture--search_area
- detect--single_line
从video文件夹中读取视频**(支持mp4格式,请确保文件夹中只有一个视频)**。以参数中设定的捕获间隔(默认一秒)从视频中捕获帧,利用逐行比较像素从视频中提取乐谱分界线并截取乐谱图像,需要手动设置参数为top/bottom,对应乐谱在视频的上半或下半。
为了避免内存占用过大,每20(可调)帧会将捕获的帧处理后输出到output文件夹中,也可以调整帧捕获的开始时间(默认0)来部分调整截取质量。
移除捕获的乐谱图像中重复的帧,主要针对乐谱阶段性变化的视频。
移除逻辑基于opencv中的Template Matching功能,若两个图像匹配区域坐标相近则被判断为相似。模版位置(可调)默认处于乐谱的右四分之一。
为了移除音乐间奏时贝斯手的街舞环节的无谱面区域,彩色占比大于一定比例(可调)的图像也会被移除。
基于与上一个程序相似的逻辑来拼接乐谱,程序同时输出匹配区域和拼接完成的乐谱。
如果在前后两张截屏中没有出现重复的部分,则结束拼接并开始拼接一张新的乐谱。匹配区域的图像输出到output文件夹中,拼接形成的长乐谱被输出到stitch文件夹中。
这一步建议选择手动
此程序实现了小节线检测,根据不同的谱面类型检测逻辑也不同,在运行前请确认视频中的乐谱是单行的/双行的并更改single_line变量。
程序在识别出垂直线后,若manual选项为True,会弹窗展示图片,请点选最上面一行谱线,这将作为程序判定小节线的依据,对于双行乐谱,还有上下小节线对齐的额外判定。
若manual选项为Fause,程序会自行尝试寻找最上一行谱线(现阶段成功率不高)。
检测到的小节线图像将输出到detect文件夹中,小节线的位置将保存于align_lines.txt文件中。
基于生成的txt文件,此程序在小节线的位置裁剪乐谱,裁剪逻辑为长宽比尽可能接近10。
裁剪后的乐谱将输出到recut文件夹中。
此程序针对裁剪后的乐谱生成tex文档,将生成的output.tex拖拽到recut文件夹中,编译即可获得最终的乐谱文件,效果如图:



