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...