處理mask圖像為單通道彩色圖


一、問題說明

最近在訓練mask rcnn時發現輸入的mask格式不對,后面發現通過labelme標注並轉換得到的Mask是單通道彩色圖,Mask圖像的像素值代表了像素點所屬的類別標簽。對於單個類別的數據集來說, Mask像素值應該是[0,1], 其中0表示背景區域;對於多個類別的數據集, Mask像素值應該是[0,1,2,…],顯示為彩色以區分不同目標。如下圖所示,雖然看上去是彩色圖像,但是打開屬性看其位深卻是8。

二、解決辦法

最開始采用OpenCV讀取,但里面自動轉換成了3通道圖(24位),類似於這篇博客在深度學習中遇到的opencv坑,后面采用Pillow庫,查看其官網說明,支持8位的調色板格式圖片,如下圖所示。

通過PIL讀取后再依次處理即可正常訓練

三、保存mask為單通道彩圖

tmp_image = np.zeros((h, w), np.uint8)
for mask_id, mask in enumerate(masks):
    tmp_image[mask >= 1] = mask_id + 1

tmp_image = Image.fromarray(tmp_image, "P")
palette_data = [0, 0, 0, 128, 0, 0, 0, 128, 0, 128, 128, 0, 0, 0, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128,
               64, 0, 0, 192, 0, 0, 64, 128, 0, 192, 128, 0, 64, 0, 128, 192, 0, 128, 64, 128, 128, 192, 128, 128,
               0, 64, 0, 128, 64, 0, 0, 192, 0, 128, 192, 0]  # 調色板
tmp_image.putpalette(palette_data)
tmp_image.save("D:/mask.png")

參考鏈接

numpy轉PIL.Image: 處理Mask圖像為單通道的彩色/灰度圖colormap.png
在深度學習中遇到的opencv坑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM