voc分割資料集 pil調色盤

2022-06-11 05:03:09 字數 4150 閱讀 7905

voc分割資料集有兩種,資料夾名字分別是segmentationclass,segmentationclassaug,其中segmentationclass資料夾樣式如下:

segmentationclassaug資料夾樣式如下:

今天來說下segmentationclass資料夾帶彩色圖的,讀乙個deeplab的pytorch**的時候,我就在找是怎麼把顏色對應到標籤圖的,找了半天沒有,但是發現最後的處理得到的標籤圖確實是0-21的畫素,可是**處理了的了.

def _make_img_gt_point_pair(self, index):

_img = image.open(self.images[index]).convert('rgb')

_target = image.open(self.categories[index])

return _img, _target

只有一處是通過pil讀取,然後我驚奇的發現僅僅是通過這個讀就已經轉成了0-21的標籤圖!!!???why?

def _make_img_gt_point_pair(self, index):

_img = image.open(self.images[index]).convert('rgb')

_target = image.open(self.categories[index])

_img.show()

_target.show()

import numpy

img = numpy.array(_img)

targe = numpy.array(_target)

用pilshow出來,還是彩色圖

但是我用numpy看targe已經是單通道了...然後我再用opencv顯示,

這裡可以看到,直接讀取路徑確實是彩色圖,但是經過pil開啟之後,就變成了標籤圖!神奇吧!

def _make_img_gt_point_pair(self, index):

_img = image.open(self.images[index]).convert('rgb')

_target = image.open(self.categories[index])

import numpy

img = numpy.array(_img)

targe = numpy.array(_target)

import cv2

cv2.imshow("opencv-show-pil",targe)

cv2.waitkey()

mm = cv2.imread(self.categories[index],-1)

cv2.imshow("opencv-read", mm)

cv2.waitkey()

_img.show()

_target.show()

print(_img.format, _img.size, _img.mode)

print(_target.format, _target.size, _target.mode)

列印pil的一些屬性,

none (438, 500) rgb

png (438, 500) p

modes 	描述

1 1位畫素,黑和白,存成8位的畫素

l 8位畫素,黑白

p 8位畫素,使用調色盤對映到任何其他模式

rgb 3× 8位畫素,真彩

rgba 4×8位畫素,真彩+透明通道

cmyk 4×8位畫素,顏色隔離

i 32位整型畫素

f 32位浮點型畫素

p 8位畫素,使用調色盤對映到任何其他模式

啥意思,沒看懂. 然後有段解釋:

在pil中,影象有很多種模式,如'l'模式,'p'模式,還有常見的'rgb'模式。模式'p'為8位彩色影象,它的每個畫素用8個bit表示,其對應的彩色值是按照調色盤索引值查詢出來的。

pascal voc的標籤影象的模式正是'p'模式。

但是它怎麼知道我哪個顏色對應哪個類別的呢.

應該是pil這個調色盤是內建的,

print(_target.getpalette())

palette = np.array(_target.getpalette(), dtype=np.uint8).reshape((256, 3))

print(palette)

print(_target.getpalette())列印出很長的一串

[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, 0,......]

轉為numpy,

palette = np.array(_target.getpalette(), dtype=np.uint8).reshape((256, 3))

print(palette)

列印如下:

[[ 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]

[ 0 64 128]

[128 64 128]

[ 0 192 128]

[128 192 128]

[ 64 64 0]

[192 64 0]

[ 64 192 0]

[192 192 0]

[ 64 64 128]

...原來如此!

coco分割資料集轉voc格式

coco資料中的ploygon即為標註資料,兩個相連數字為乙個座標 而voc的分割標註直接為png的8位偽彩色圖,通過呼叫調色盤來顯示色彩。因此,要把分割資料整理為voc格式,通過以下步驟 第一,在原圖中繪製目標輪廓並填充,需要注意的是,一般我們的資料都是32位rgb彩色圖,因此,首先需要將32位r...

語義分割訓練資料集 VOC 2012

pascal voc 2012語義分割資料集 標準的voc2012資料集有21個類別 包括背景 包含 這些比較常見的類別。voc2012中用於分割的中,trainval包含2007 2011你那所有對應的,test只包含2008 2011年的。trainaug有10582張,trainval中有29...

製作VOC資料集

使用opencv,外接攝像頭,按一定幀率採集影象,如下 import cv2 as cv cap cv.videocapture 0 fourcc cv.videowriter fourcc x v i d out cv.videowriter r c users chen desktop pyto...