天天看點

圖檔格式矢量轉栅格

最近遇到一個問題,需要将一串點描述的一個封閉的面轉成栅格圖檔。這在遙感中非常常見,python中也有非常友善的庫GDAL,包含了此功能的豐富子產品。但顯然對于隻完成這個小任務有點小題大作。

好在opencv也有非常好用的函數,可以直接完成轉換。使用cv2.fillPoly 和 cv2.fillConvexPoly這兩個函數就好了。可以參考這個blog或者直接看opencv的幫助文檔。

代碼

'''
将MScoco資料集中的人體輪廓标注,轉成栅格圖檔raster
MSCOCO也自帶maskAnno掩膜标注資料,我沒有看裡面的内容,但是感覺應該也僅僅是坐标而已,以為這是最省存儲空間的
'''
import cv2
def get_mask(data, anns):
    height, widht = , 
    try:
        height, widht, _ = data.shape
    except Exception as e:
        print(e)
    img = np.zeros((height, widht))
    polygons = []
    for ann in anns:
        if 'segmentation' in ann:
            if type(ann['segmentation']) == list:
                # polygon
                for seg in ann['segmentation']:
                    poly = np.array(seg).reshape((int(len(seg) / ), ))
                    polygons.append(poly.astype('int32'))
    cv2.fillPoly(img, polygons, )
    return img
           

opencv有些函數不太熟悉,花了些時間才找到,不過更麻煩的是

怎麼在python3中使用opencv,import cv2

幸好隻是編譯麻煩一些,操作非常簡單,看這篇blog