最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python從Manim中提取表格/坐標(biāo)系并轉(zhuǎn)GIF的四種高效方案

 更新時(shí)間:2025年08月29日 09:40:00   作者:巴厘貓  
在數(shù)據(jù)可視化和數(shù)學(xué)動(dòng)畫(huà)創(chuàng)作中,我們經(jīng)常需要將 Manim 動(dòng)畫(huà)中的表格、坐標(biāo)系等核心元素單獨(dú)導(dǎo)出為 GIF,本文整理了四種高效方案,每種方案僅提供核心代碼,聚焦關(guān)鍵實(shí)現(xiàn)邏輯,需要的朋友可以參考下

引言

在數(shù)據(jù)可視化和數(shù)學(xué)動(dòng)畫(huà)創(chuàng)作中,我們經(jīng)常需要將 Manim 動(dòng)畫(huà)中的表格、坐標(biāo)系等核心元素單獨(dú)導(dǎo)出為 GIF。本文整理了四種高效方案,每種方案僅提供核心代碼,聚焦關(guān)鍵實(shí)現(xiàn)邏輯。

方案 1:代碼級(jí)篩選與渲染

通過(guò) AST 解析技術(shù)過(guò)濾掉文字和公式,保留目標(biāo)元素代碼并導(dǎo)出。 核心代碼(篩選邏輯):

import ast
from ast import NodeTransformer

class ManimElementFilter(NodeTransformer):
    # 保留的元素類型
    PRESERVE = {"Axes", "Table", "BarChart"}
    # 移除的文字公式類型
    REMOVE = {"Text", "MathTex", "Tex"}

    def visit_Call(self, node):
        # 移除文字公式創(chuàng)建代碼
        if isinstance(node.func, ast.Name) and node.func.id in self.REMOVE:
            return None
        
        # 過(guò)濾方法調(diào)用中的文字參數(shù)
        if (isinstance(node.func, ast.Attribute) and 
            node.func.value.id == "self" and 
            node.func.attr in ["add", "play"]):
            
            node.args = [arg for arg in node.args 
                        if not (isinstance(arg, ast.Call) and 
                                isinstance(arg.func, ast.Name) and 
                                arg.func.id in self.REMOVE)]
        
        return node

使用方式:

# 處理代碼
tree = ast.parse(original_code)
filtered_tree = ManimElementFilter().visit(tree)
# 添加相機(jī)聚焦邏輯并導(dǎo)出GIF

方案 2:運(yùn)行時(shí)對(duì)象篩選

通過(guò)自定義場(chǎng)景類,在渲染時(shí)自動(dòng)過(guò)濾不需要的元素。 核心代碼(自定義場(chǎng)景):

from manimlib.scene.scene import Scene

class ElementExtractingScene(Scene):
    # 目標(biāo)元素類型
    target_types = (Axes, Table, BarChart)
    
    def setup(self):
        super().setup()
        self.original_construct = self.construct
        self.construct = self.filtered_construct
    
    def filtered_construct(self):
        # 執(zhí)行原始構(gòu)造邏輯
        self.original_construct()
        # 篩選目標(biāo)元素
        self.mobjects = [m for m in self.mobjects 
                        if isinstance(m, self.target_types)]
        # 調(diào)整相機(jī)
        if self.mobjects:
            self.camera.frame.move_to(self.mobjects[0].get_center())
            self.camera.frame.set_height(max(m.get_height() for m in self.mobjects) * 1.2)

使用方式:

# 修改原場(chǎng)景繼承
class MyScene(ElementExtractingScene):
    # 原場(chǎng)景代碼不變

方案 3:視頻幀后處理

對(duì)已渲染的視頻進(jìn)行圖像處理,識(shí)別并提取目標(biāo)區(qū)域。 核心代碼(元素識(shí)別):

import cv2
import numpy as np

def detect_table_region(frame):
    """檢測(cè)表格區(qū)域"""
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray, 50, 150)
    
    # 檢測(cè)直線(表格線特征)
    lines = cv2.HoughLinesP(edges, 1, np.pi/180, 100, 
                           minLineLength=50, maxLineGap=10)
    
    if lines is None:
        return None
        
    # 計(jì)算邊界框
    min_x = np.min(lines[:, :, 0])
    max_x = np.max(lines[:, :, 2])
    min_y = np.min(lines[:, :, 1])
    max_y = np.max(lines[:, :, 3])
    
    return (min_y, max_y, min_x, max_x)

def create_gif_from_roi(frames, roi, output_path):
    """從ROI區(qū)域創(chuàng)建GIF"""
    min_y, max_y, min_x, max_x = roi
    # 裁剪所有幀并合成GIF
    # ...

方案 4:標(biāo)記式提取

在創(chuàng)建元素時(shí)主動(dòng)標(biāo)記,后續(xù)專用工具提取標(biāo)記元素。 核心代碼(標(biāo)記工具):

class ElementMarker:
    def __init__(self):
        self.marked = {}
    
    def mark(self, element, name=None, **kwargs):
        """標(biāo)記元素并附加導(dǎo)出參數(shù)"""
        name = name or f"element_{len(self.marked)}"
        self.marked[name] = (element, kwargs)
        return element  # 不影響原有代碼

# 使用示例
class MyScene(Scene):
    def construct(self):
        marker = ElementMarker()
        
        # 標(biāo)記表格
        table = marker.mark(
            Table([["A", "B"], ["C", "D"]]),
            name="data_table", type="table"
        )
        
        # 標(biāo)記坐標(biāo)系
        axes = marker.mark(
            Axes(x_range=[0, 10], y_range=[0, 10]),
            name="main_axes", type="axes"
        )
        
        # 導(dǎo)出邏輯
        self.export_marked(marker)

方案對(duì)比與選擇建議

方案核心優(yōu)勢(shì)適用場(chǎng)景
代碼級(jí)篩選精度最高,保留完整動(dòng)畫(huà)代碼規(guī)范、批量處理
運(yùn)行時(shí)篩選無(wú)需修改原代碼快速驗(yàn)證、中等復(fù)雜度場(chǎng)景
視頻后處理不依賴源代碼僅有視頻文件的情況
標(biāo)記式提取靈活可控,支持復(fù)雜元素長(zhǎng)期項(xiàng)目、需精細(xì)控制

實(shí)際應(yīng)用中,推薦優(yōu)先使用 "運(yùn)行時(shí)篩選" 方案(平衡實(shí)現(xiàn)難度和效果),或 "標(biāo)記式提取" 方案(適合長(zhǎng)期維護(hù)的項(xiàng)目)。 所有方案均可結(jié)合批處理腳本實(shí)現(xiàn)多文件自動(dòng)化處理,根據(jù)實(shí)際需求調(diào)整參數(shù)即可獲得理想效果。

到此這篇關(guān)于Python從Manim中提取表格/坐標(biāo)系并轉(zhuǎn)GIF的四種高效方案的文章就介紹到這了,更多相關(guān)Python Manim提取表格并轉(zhuǎn)GIF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python腳本實(shí)現(xiàn)xls(xlsx)轉(zhuǎn)成csv

    python腳本實(shí)現(xiàn)xls(xlsx)轉(zhuǎn)成csv

    這篇文章主要介紹了python腳本實(shí)現(xiàn)xls(xlsx)轉(zhuǎn)成csv的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • 詳解Scrapy Redis入門實(shí)戰(zhàn)

    詳解Scrapy Redis入門實(shí)戰(zhàn)

    這篇文章主要介紹了詳解Scrapy Redis入門實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解Python Opencv和PIL讀取圖像文件的差別

    詳解Python Opencv和PIL讀取圖像文件的差別

    這篇文章主要介紹了詳解Python Opencv和PIL讀取圖像文件的差別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Python梯度提升庫(kù)XGBoost解決機(jī)器學(xué)習(xí)問(wèn)題使用探究

    Python梯度提升庫(kù)XGBoost解決機(jī)器學(xué)習(xí)問(wèn)題使用探究

    XGBoost是一個(gè)流行的梯度提升庫(kù),特別適用于解決各種機(jī)器學(xué)習(xí)問(wèn)題,它在性能和速度上表現(xiàn)出色,常被用于分類、回歸、排序、推薦系統(tǒng)等應(yīng)用,本文將介紹XGBoost的基本原理、核心功能以及一些詳細(xì)的示例代碼
    2024-01-01
  • 詳解Python的Django框架中的模版繼承

    詳解Python的Django框架中的模版繼承

    這篇文章主要介紹了詳解Python的Django框架中的模版繼承,就像Python中面對(duì)對(duì)象的方法繼承道理類似,需要的朋友可以參考下
    2015-07-07
  • 5款非常棒的Python工具

    5款非常棒的Python工具

    這篇文章主要為大家詳細(xì)介紹了5款非常棒的Python工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 詳解利用python+opencv識(shí)別圖片中的圓形(霍夫變換)

    詳解利用python+opencv識(shí)別圖片中的圓形(霍夫變換)

    這篇文章主要介紹了詳解利用python+opencv識(shí)別圖片中的圓形(霍夫變換),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python?實(shí)現(xiàn)dcmtk關(guān)聯(lián)pacs功能推送下拉影像(推薦)

    python?實(shí)現(xiàn)dcmtk關(guān)聯(lián)pacs功能推送下拉影像(推薦)

    這篇文章主要介紹了python?實(shí)現(xiàn)dcmtk關(guān)聯(lián)pacs功能?推送下拉影像,包含dcmtk關(guān)聯(lián)pacs技術(shù)筆記等相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Python實(shí)現(xiàn)快速為PDF添加背景色或背景圖片

    Python實(shí)現(xiàn)快速為PDF添加背景色或背景圖片

    在日常辦公或文檔處理中,我們經(jīng)常需要為 PDF 文件添加背景色或背景圖片,本文將介紹如何使用 Free Spire.PDF for Python 庫(kù),通過(guò)簡(jiǎn)單的代碼實(shí)現(xiàn)為 PDF 添加背景色和背景圖片的功能,有需要的可以了解下
    2026-03-03
  • Python實(shí)現(xiàn)的中國(guó)剩余定理算法示例

    Python實(shí)現(xiàn)的中國(guó)剩余定理算法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的中國(guó)剩余定理算法,結(jié)合實(shí)例形式分析了中國(guó)剩余定理的概念、原理及具體算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-08-08

最新評(píng)論

贵南县| 博爱县| 商都县| 枞阳县| 延吉市| 宜州市| 乌苏市| 且末县| 子长县| 望江县| 闵行区| 辽中县| 土默特右旗| 白银市| 佛山市| 开原市| 新民市| 庄浪县| 龙江县| 喀喇| 呈贡县| 萍乡市| 吴旗县| 肇东市| 巴南区| 涿州市| 红安县| 凌海市| 微山县| 北流市| 南京市| 天台县| 平顶山市| 朔州市| 涟水县| 太康县| 民勤县| 东乌珠穆沁旗| 临汾市| 启东市| 五大连池市|