
簡介圖像前景分割是計算機視覺中的基礎(chǔ)任務(wù)這份經(jīng)典例程圍繞GrabCut算法展開面向圖像處理初學者與算法研究人員演示如何通過簡單的前景/背景標記將目標對象從復雜場景中分離出來。例程完整應(yīng)用了馬爾可夫隨機場模型、高斯混合模型與圖割能量最小化技術(shù)代碼結(jié)構(gòu)清晰便于讀者結(jié)合理論逐行理解分割流程。壓縮包共107個文件大小10.31MB包含cpp與h源文件、可執(zhí)行程序、以及jpg/png/bmp/ppm等多種測試圖片還保留有工程編譯所需的dsp/ncb等輔助文件既能直接運行查看效果也適合在Visual Studio環(huán)境中重新編譯調(diào)試。目前已有641人學習下載。通過這份資源讀者可以獲得一套完整的GrabCut分割實現(xiàn)包括顏色分布建模、迭代參數(shù)更新和最小割求解等核心模塊有助于將經(jīng)典分割算法遷移到目標檢測、視頻監(jiān)控等實際項目中提升圖像分析的準確性與效率。1. 圖像前景分割例程只是入口難點在邊界和參數(shù)先給結(jié)論opencv 自帶的前景分割例程grabcut能在一分鐘之內(nèi)跑通但把它從「分割出個大概」調(diào)成「能直接交付的摳圖結(jié)果」才是這類任務(wù)真正的分水嶺。圖像前景分割要解決的是給定一張圖把用戶關(guān)心的主體人、車、商品從背景里分離出來輸出一個掩碼片。經(jīng)典例程的價值在于它把一套可解釋、可干預的傳統(tǒng)算法路線完整呈現(xiàn)出來適合沒有 gpu、需要復核每一層中間結(jié)果、或者想給深度學習標注打底稿的從業(yè)者。這篇就照著這條路線把選型理由、接口參數(shù)、邊界坑和升級方向一次講透。2. 為什么經(jīng)典例程仍然繞不開三種路線與 grabcut 的能量框架2.1 前景分割的幾條經(jīng)典路線閾值、分水嶺、圖割怎么選早期項目里最常見的三種非深度學習分割路線分別是閾值分割、分水嶺和以 grabcut 為代表的圖割方法。閾值分割的前提是目標和背景的灰度或顏色分布有明顯間隔比如深色零件放在白紙上一個 otsu 大津法就能拿到很干凈的掩碼但它怕光照不均也怕目標本身帶高光或陰影這些區(qū)域和背景灰度疊在一起時閾值無論怎么調(diào)都會漏一塊或者多一塊。分水嶺的思路是把圖像看成地形圖從局部極小值開始注水遇到山脊線就停止以此圈出目標區(qū)域。它的問題在于對噪聲和紋理極其敏感一張帶水印或者淺紋理背景的圖經(jīng)常會被切成幾十個小碎片需要先做距離變換、再做形態(tài)學開運算做約束。相比之下grabcut 的底層是圖割graph cut把每個像素當作節(jié)點像素間差異當作邊權(quán)通過最小化一個能量函數(shù)完成分割。它天然能吃顏色先驗和空間連續(xù)性對邊界模糊、背景雜亂的圖抗性明顯更好。所以選型邏輯其實很直白背景可控、對比度高直接用閾值法最省事目標邊緣復雜但背景相對單一分水嶺加形態(tài)學值得一試目標顏色分布寬、背景又雜亂比如一張室內(nèi)照片里要摳人grabcut 這類經(jīng)典例程才是兜底選項。opencv 的 grabcut 例程正是把最后一條路線做成了開箱即用的狀態(tài)而理解它為什么有效得先拆開它的能量函數(shù)。2.2 grabcut 的迭代邏輯gmm 擬合、能量最小化與掩碼狀態(tài)機grabcut 的核心是一個迭代的圖割過程。第一步需要用戶提供一個矩形框框內(nèi)認為是前景候選框外先按背景處理然后算法用兩個高斯混合模型gmm分別擬合框內(nèi)和框外的顏色分布每個像素都會被貼上「屬于前景模型還是背景模型」的軟標簽接下來建立一張圖把相鄰像素之間的顏色差異轉(zhuǎn)成邊的權(quán)重差異大的地方切割代價低差異小的地方切割代價高這就讓分割線傾向落在顏色跳變劇烈的邊緣上最后用最大流最小割求解把標簽更新一輪。更新后的標簽又會返回來重新估計兩個 gmm迭代兩三輪之后矩形框內(nèi)真正像舊目標顏色的像素會留在前景顏色偏向框外背景的像素則被慢慢剔除。opencv 的實現(xiàn)里掩碼本身是一個狀態(tài)機。cv2.gc_bgd表示確定背景cv2.gc_fgd表示確定前景cv2.gc_pr_bgd和cv2.gc_pr_fgd表示可能是背景和可能是前景。第一次運行時傳入cv2.gc_init_with_rect算法會用矩形框自動填充這些標簽之后如果想人工修正就在掩碼上把確定的區(qū)域涂成gc_bgd或gc_fgd再以cv2.gc_init_with_mask重新跑。這種兩階段設(shè)計是這套例程的靈魂自動初始化負責快速收斂人工標記負責收拾自動階段搞不定的殘局。理解了這個框架就明白為什么 grabcut 對初始化敏感矩形框本質(zhì)上是給 gmm 定的第一條先驗框大了會把大量背景顏色混進前景模型框小了 gmm 沒見過完整的目標顏色分布輸出自然缺胳膊少腿。這不是參數(shù)調(diào)參能救回來的必須回到交互邏輯上改輸入。這也是經(jīng)典例程和深度學習分割最不同的地方——深度模型的先驗藏在訓練集里grabcut 的先驗面前就得靠交互補。2.3 經(jīng)典例程的適用邊界交互可控與批量推理的取舍一個經(jīng)常被問的問題是grabcut 能不能直接掛在生產(chǎn)鏈路上做全自動分割。我的答案是看場景負債。它不依賴訓練數(shù)據(jù)和顯卡啟動成本接近于零對單張圖中單個主體、且能用一個矩形大致框住目標的場景電商白底圖摳商品、掃描件去底色、視頻里固定機位的主體提取效果相當穩(wěn)定。但如果目標是幾十種品類輪換、每張圖構(gòu)圖差異極大全自動跑 grabcut 的翻車率會讓你陷入無窮的準召調(diào)參。這種情況下常見做法是把 grabcut 當成一個配合前級檢測器的后處理模塊先用目標檢測或者人工配置的 roi 拿到候選框再進 grabcut 細化邊緣。這既能發(fā)揮它邊界精細的優(yōu)勢又能繞開它對框敏感的毛病。另外經(jīng)典例程的運行時間是毫秒到秒級別比任何深度分割模型都快一個量級在嵌入式設(shè)備、相機固件這類算力緊張的環(huán)境里至今仍是實用的選擇。接下來直接進入動手環(huán)節(jié)用 opencv 把最小例程跑起來。3. 用 opencv 跑通 grabcut 最小例程接口、參數(shù)與結(jié)果還原3.1 環(huán)境準備與最小輸入一張圖和一個盒建議直接用 python 和 opencv-python版本 4.x 以上即可不需要額外裝深度學習框架。為了驗證例程本身我習慣先找一張白底或簡單背景的圖目標最好占畫面 30% 以上比如一張桌上放著的馬克杯。比例太小會讓 gmm 的采樣不夠首輪擬合就是玄學。輸入路徑用絕對路徑避免和腳本工作目錄糾纏。import cv2 import numpy as np # 讀取原圖建議轉(zhuǎn)成 rgb 順序后續(xù)可視化才不花 img cv2.imread(cup.jpg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 目標的大致范圍格式為 (x, y, w, h)盡量緊貼主體 rect (60, 40, 180, 220) # 掩碼區(qū)全 0 即可首次運行時由 rect 自動初始化 mask np.zeros(img.shape[:2], dtypenp.uint8) # 模型參數(shù)區(qū)grabcut 內(nèi)部要復用必須原樣傳回 bgd_model np.zeros((1, 65), np.float64) fgd_model np.zeros((1, 65), np.float64) # 執(zhí)行分割迭代次數(shù)先給 5后續(xù)按效果再調(diào) cv2.grabCut(img, mask, rect, bgd_model, fgd_model, 5, cv2.GC_INIT_WITH_RECT)這段代碼里mask在調(diào)用前不需要填任何值cv2.gc_init_with_rect會基于rect覆蓋的區(qū)域做第一輪標記矩形內(nèi)的像素初篩為可能是前景矩形外的像素初篩為可能是背景。bgd_model和fgd_model是 gmm 的內(nèi)部參數(shù)容器opencv 要求它們必須是 1 行 65 列的單精度浮點數(shù)不能傳none否則有些版本會直接報錯這也是新手最容易卡住的第一道坎。iterCount5是常用起步值后面會專門講這個參數(shù)的行為。3.2 把四態(tài)掩碼還原成可用的前背景圖grabcut返回的mask里并不是干凈的 0/255而是四個數(shù)值0 確定背景、1 確定前景、2 可能背景、3 可能前景。直接用cv2.imshow看這張 mask只能看到一團黑因為 0 和 2 在灰度顯示下幾乎沒有區(qū)別。要把掩碼變成可交付的結(jié)果必須做一個映射把確定前景和可能前景統(tǒng)一為白色其余統(tǒng)一為黑色。# 四態(tài)掩碼轉(zhuǎn)二值1 和 3 視為前景0 和 2 視為背景 mask_binary np.where((mask 1) | (mask 3), 255, 0).astype(np.uint8) # 計算切割后的前景圖原圖按位與掩碼背景被清成黑色 foreground cv2.bitwise_and(img, img, maskmask_binary) # 順便生成一個帶透明通道的 png方便疊到其他背景上 bgr cv2.cvtColor(img, cv2.COLOR_RGB2BGR) alpha mask_binary.astype(np.float32) / 255.0 rgba np.dstack([bgr, (alpha * 255).astype(np.uint8)]) cv2.imwrite(cup_foreground.png, rgba)這里的邏輯分三步第一步做狀態(tài)合并把不確定的區(qū)域按前景保留這樣邊緣的軟過渡區(qū)不會直接被切掉第二步用掩碼與原圖做按位與得到一個黑底的前景圖用于快速目檢第三步是生成帶 alpha 通道的 png這是實際交付摳圖素材最常用的格式。參數(shù)上有一個容易誤用的點——bitwise_and的mask必須是非零即白的單通道圖如果直接把四態(tài) mask 傳進去確定背景和可能背景會被同樣處理最終摳出來的圖會帶上一圈背景色的毛邊。3.3 驗證分割質(zhì)量看一眼掩碼疊加別只看前景圖很多人跑完例程只盯著黑底前景圖看覺得邊緣有鋸齒、有空洞就急著調(diào)參。我常用的驗證方式是做掩碼疊加把半透明的輪廓畫在原圖上這樣能直接看出分割線落在目標的哪些部位是邊界偏內(nèi)了還是偏外了是漏了杯柄還是吞了桌面反光。這類診斷信息比單純看摳圖結(jié)果直觀得多。# 在原圖上畫出前景輪廓紅色線便于定位分割邊界 contours, _ cv2.findContours(mask_binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) vis img.copy() cv2.drawContours(vis, contours, -1, (255, 0, 0), 2)拿到vis后把原圖和輪廓圖并排鋪開先用肉眼判斷當前的問題屬于哪一類輪廓整體內(nèi)縮說明前景 gmm 里混入了背景顏色輪廓外擴說明迭代次數(shù)把邊緣當成了噪聲削掉局部缺失則多半是矩形框沒覆蓋完整。這一輪診斷之后才進入真正的調(diào)參環(huán)節(jié)。也就是說例程跑通只是開始能用它解決實際圖片才是目標。接下來把參數(shù)調(diào)整的規(guī)律逐條說清楚。4. 參數(shù)與初始化調(diào)優(yōu)迭代次數(shù)、矩形框策略、多目標處理4.1 迭代次數(shù)不是越大越好收斂越快不等于越準iterCount控制 gmm 與圖割之間交替更新的輪數(shù)。第一次迭代時兩個 gmm 是在矩形框內(nèi)外一次性采樣擬合的第二次起才根據(jù)上一輪分割結(jié)果重新擬合。默認經(jīng)驗值 5 對多數(shù)圖足夠但一個常見的翻車現(xiàn)場是背景和前景顏色接近的圖迭代到第 15 次時一些原本被判定為背景的、顏色恰好和前景模型接近的區(qū)域被逐漸吸了進來造成大塊背景融進前景。這種現(xiàn)象叫 gmm 過擬合迭代越久模型對前景顏色的描述越「精細」同時也越容易把離群背景收編。如果發(fā)現(xiàn)第 1 輪效果比第 5 輪好、第 5 輪比第 10 輪差就把迭代次數(shù)降到 2 或 3。我的習慣是每次改動都跑一組 2、5、10 的對比輸出疊在一張圖上肉眼判斷而不是憑感覺定死。理論上 iterCount 只需要讓能量函數(shù)收斂但實際上收斂點不是語義上的最優(yōu)分割點所以不要迷信迭代越多越準。摳圖場景里反而更傾向用小迭代次數(shù)保住輪廓因為邊界分割的精細度更多取決于像素間的梯度而不是 gmm 的細膩程度。4.2 矩形框怎么給才穩(wěn)緊貼、留隙、還是故意放大矩形框是 grabcut 唯一的自動初始化輸入它的質(zhì)量直接決定 gmm 首輪擬合的純度。三種常見給法對應(yīng)三種結(jié)果傾向給得緊也就是矩形邊剛好貼著目標邊緣前景采樣最純但風險是漏掉目標邊緣的高光或細長突出物比如人的頭發(fā)絲、水杯的把手、商品的吊牌。給得松矩形四周留出幾個像素的背景可以在一定程度上緩解這種漏邊但引入的背景像素會變成前景模型的噪聲表現(xiàn)為輪廓外擴或者帶一圈背景色。給得大比如為了省事直接把整個目標連同小半張背景框進去那 gmm 里的前景模型有相當大的概率被背景占主導最終結(jié)果會是目標內(nèi)部出現(xiàn)大塊黑洞或者整個目標被當成背景吞掉。常見做法是先用目標檢測或者人工標注拿一個略微外擴的框然后再用一次形態(tài)學收縮把它收緊到目標邊緣這個流程叫做「框校準」。在落地代碼里我會把rect定義成四元組后先做一次膨脹測試把rect在上下左右各擴展 10 個像素對比兩次分割結(jié)果如果擴展后分割結(jié)論變化不大說明當前框還有余量如果變化劇烈說明初始化本身就不穩(wěn)這種情況與其調(diào)框不如直接轉(zhuǎn)人工 mask 標記。4.3 多目標分割單矩形一次只能框一個多個目標要迭代grabcut 的經(jīng)典例程本質(zhì)上是對單目標設(shè)計的因為一個 gmm 只能描述一團顏色分布。如果一張圖上有兩個不同顏色的物體你想同時把它們都摳出來用一個矩形框住兩個目標會讓前景 gmm 同時擬合兩組顏色聚類分裂后兩塊目標都保不齊。處理多目標的常見做法有兩種。第一種是把全圖當背景、逐個目標處理對每個目標分別給一個緊框各自跑一次 grabcut最后把多個二值掩碼做按位或合并。第二種是只跑一次多目標分割先用一個小框框住一個目標iterCount拉低拿到第一個目標掩碼后把這個掩碼中確定為前景的區(qū)域直接寫進全局 mask 的gc_fgd位置然后換下一個框繼續(xù)。mask_final np.zeros(img.shape[:2], dtypenp.uint8) # 目標 A先用矩形自動初始化再人工修正統(tǒng)一入口 rect_a (20, 30, 120, 160) mask np.zeros(img.shape[:2], dtypenp.uint8) cv2.grabCut(img, mask, rect_a, bgd_model, fgd_model, 5, cv2.GC_INIT_WITH_RECT) # 目標 A 的結(jié)果寫入全局掩碼前景與可能前景都保留 mask_final[(mask cv2.GC_FGD) | (mask cv2.GC_PR_FGD)] cv2.GC_FGD mask_final[(mask cv2.GC_BGD) | (mask cv2.GC_PR_BGD)] cv2.GC_BGD # 目標 B換一個矩形重復上面流程 rect_b (200, 250, 140, 180) mask np.zeros(img.shape[:2], dtypenp.uint8) cv2.grabCut(img, mask, rect_b, bgd_model, fgd_model, 5, cv2.GC_INIT_WITH_RECT) mask_final[(mask cv2.GC_FGD) | (mask cv2.GC_PR_FGD)] cv2.GC_FGD mask_final[(mask cv2.GC_BGD) | (mask cv2.GC_PR_BGD)] cv2.GC_BGD這里的關(guān)鍵是每次重新調(diào)用 grabcut 時都要新建一個全零 mask不要讓上一次的狀態(tài)殘留干擾本次初始化。bgd_model和fgd_model之間共享會互相污染所以要么每次也新建要么把它們置零。最終mask_final里如果有兩個目標相距很近、邊緣重疊分割線可能會互相干擾這種情況下建議退回到方法一逐目標獨立跑最后用形態(tài)學閉運算把兩塊連通域接起來。4.4 閾值法組合經(jīng)典例程不是唯一解混合才是常態(tài)在很多實際項目里我并不會讓 grabcut 單獨扛下所有分割壓力。背景是純色或者接近純色時先用閾值拿到一個粗糙的全局掩碼把其中確定屬于背景的區(qū)域預先寫入 mask 的gc_bgd再讓 grabcut 只負責細化邊緣。這種混合方式能大幅減少 grabcut 對矩形框的依賴因為背景位置已經(jīng)人工給定gmm 不需要再猜。比如白色背景的商品圖先做灰度化加 otsu 閾值mask[thresh 0] cv2.GC_BGD然后給一個覆蓋商品的寬松矩形框調(diào)用 grabcut 時用cv2.GC_INIT_WITH_MASK而不是cv2.GC_INIT_WITH_RECT這樣矩形框只補充前景位置背景位置以閾值結(jié)果為準。參數(shù)上注意用gc_init_with_mask時矩形框參數(shù)即使傳入也會被忽略opencv 只看 mask 里的已知標記區(qū)域。這套組合對于白底商品圖、掃描件、票據(jù)摳字都特別穩(wěn)血淚經(jīng)驗是別一上來就讓 grabcut 從零猜背景能給的先驗都給上。5. 經(jīng)典例程避坑記錄五條最常見的翻車現(xiàn)場5.1 矩形框把目標框破相了現(xiàn)象目標邊緣出現(xiàn)幾道被切掉的缺口比如人像的肩膀少了一塊不是平滑的弧線而是一條直線切痕。原因矩形框的一條邊恰好壓到了目標邊緣grabcut 初始化時矩形內(nèi)靠近該邊的區(qū)域被標記為前景 gmm但實際顏色和背景更接近經(jīng)過若干輪迭代后被反轉(zhuǎn)成背景而且這個反轉(zhuǎn)會沿著顏色相似的區(qū)域擴散形成直線切痕。解決把矩形向內(nèi)收縮 5 到 10 個像素避開目標邊緣如果目標邊緣是不可預測的曲線放棄矩形自動初始化改用鼠標在 mask 上手動涂一條確定前景的線之后跑gc_init_with_mask。這個坑在所有用 grabcut 的項目里出現(xiàn)頻率最高先懷疑框不要先懷疑參數(shù)。5.2 迭代次數(shù)一高背景就開始滲進來現(xiàn)象第一次分割結(jié)果還算干凈把iterCount從 5 調(diào)大到 20 后背景里和前景顏色接近的色塊逐漸變成前景比如淺色木桌上的人像桌面反光區(qū)域被一并保留。原因迭代次數(shù)越多前景 gmm 對已經(jīng)標記為前景的像素擬合越精細一些離群的顏色點桌面反光會被新一輪 gmm 納入置信區(qū)間下一次圖割就把它歸入前景。這是 gmm 過擬合的典型表現(xiàn)。解決把iterCount調(diào)回 2 到 3或者不上調(diào)迭代次數(shù)改為用人工 mask 標記把反光區(qū)域強制設(shè)為背景。記住一個原則iterCount 是收斂調(diào)節(jié)器不是精度調(diào)節(jié)器別指望多迭代能換來更干凈的邊緣。5.3 結(jié)果只有黑底和白色輪廓前景圖里全是洞現(xiàn)象摳出來的前景圖內(nèi)部有大量黑色空洞目標本身像是被蟲子啃過但邊緣輪廓大體正確。原因前景 gmm 初始化時矩形框內(nèi)混入了過多背景色比如要摳一個深色背包矩形框卻框住了下面一大塊淺色桌面gmm 把桌面顏色也當成前景分量之一背包內(nèi)部顏色反而成了少數(shù)派。解決收緊矩形框讓前景采樣區(qū)域盡量落在目標本體上同時調(diào)低iterCount給 gmm 少一點機會擴大顏色范圍。如果洞已經(jīng)出現(xiàn)先用形態(tài)學閉運算cv2.MORPH_CLOSE核大小 5x5 起步填洞再做人眼檢查不要直接交付。5.4 掩碼顯示全黑以為分割完全失敗現(xiàn)象把 grabcut 返回的 mask 直接imshow屏幕上幾乎全黑只有零星亮點瞬間覺得例程沒跑對。原因mask 里的灰度值只有 0、1、2、3 四檔0 背景和 2 可能背景在 8 位灰度顯示下都接近純黑人眼區(qū)分不開。這是可視化錯誤不是分割錯誤。解決按 3.2 節(jié)的方法把 mask 映射成 0/255 二值圖再顯示。想快速排查分割是否真的失敗可以統(tǒng)計mask cv2.GC_FGD和mask cv2.GC_PR_FGD的像素數(shù)量如果前景像素占比低于 1%才需要懷疑初始化有問題。5.5 目標太小分割結(jié)果總是一團噪聲現(xiàn)象畫面里目標占比不到 10%矩形框稍微給大一點分割結(jié)果就變成碎點狀目標輪廓完全站不住。原因目標小意味著矩形框內(nèi)前景像素稀疏gmm 的采樣不穩(wěn)定同時背景像素數(shù)量占壓倒性優(yōu)勢圖割的邊界項難以形成足夠強的切割線。這種問題不是參數(shù)能解決的。解決先用目標檢測或者人工指定方式把矩形框壓到緊貼目標的尺寸再對掩碼做一輪形態(tài)學開運算去噪。如果目標占比小于 5%建議放棄 grabcut直接上深度學習分割模型經(jīng)典例程在極小目標上的性價比已經(jīng)很低了。6. 把經(jīng)典例程變成交互式分割工具從例程到可用交付物前面的內(nèi)容都是圍繞單張圖、單個矩形框展開但在真實生產(chǎn)里你手頭往往是一批圖每張圖的目標位置都不同。這時候最常見的升級做法是把 grabcut 封裝成一個交互式分割腳本用鼠標直接在預覽窗口里框選目標、點擊切換前景/背景標記這樣批量處理幾十張圖時不需要改代碼只需要動鼠標。我一般會先彈出原圖鼠標拖動畫一個矩形松開后立刻跑一次 grabcut 并把掩碼疊加顯示在原圖上如果結(jié)果不理想允許用戶在掩碼上按住左鍵涂確定前景、按住右鍵涂確定背景再按一次空格鍵用cv2.gc_init_with_mask重新迭代。這個過程把例程的可解釋性發(fā)揮到了最大每一次算法的決策都實時可見用戶可以精準地干預。在這個工具基礎(chǔ)上另一個值得做的方向是把它接到深度學習的數(shù)據(jù)管線里當標注預填。你可以用 labelme 這類工具先畫幾個粗略的多邊形粗略到不需要貼邊導出 json 后轉(zhuǎn)成 grabcut 的掩碼初始化再跑gc_init_with_mask自動把邊界修精細然后把結(jié)果回灌成細標注。這種方式能把標注一個精細掩碼的時間從分鐘級壓到十秒級對于幾千張圖的前景分割標注任務(wù)節(jié)省的時間非??捎^。經(jīng)典例程也因此不只是一段跑得通的 ctrl-c ctrl-v 代碼而是一個可以反復打磨的基座。最后補一個個人習慣每次跑完 grabcut 都會保存三樣東西——原始 mask、二值掩碼、帶 alpha 的摳圖 png文件名帶上迭代次數(shù)和矩形框坐標。這樣后續(xù)如果分割效果有變化能回溯是哪一版參數(shù)哪個框產(chǎn)生的。這種做法在多人協(xié)作時尤其能避免互相改參后說不清是誰把結(jié)果弄壞的扯皮。圖像前景分割的經(jīng)典例程本質(zhì)上不是讓你背一段接口而是讓你建立一套「初始化、迭代、診斷、修正」的閉環(huán)手感這套感覺換到深度學習分割模型時依然通用。希望幫到你。本文還有配套的精品資源點擊獲取