图片格式矢量转栅格

最近遇到一个问题,需要将一串点描述的一个封闭的面转成栅格图片。这在遥感中非常常见,python中也有非常方便的库GDAL,包含了此功能的丰富模块。但显然对于只完成这个小任务有点小题大作。
好在opencv也有非常好用的函数,可以直接完成转换。使用cv2.fillPoly 和 cv2.fillConvexPoly这两个函数就好了。可以参考这个blog或者直接看opencv的帮助文档。

代码

'''
将MScoco数据集中的人体轮廓标注,转成栅格图片raster
MSCOCO也自带maskAnno掩膜标注数据,我没有看里面的内容,但是感觉应该也仅仅是坐标而已,以为这是最省存储空间的
'''
import cv2
def get_mask(data, anns):
    height, widht = 0, 0
    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) / 2), 2))
                    polygons.append(poly.astype('int32'))
    cv2.fillPoly(img, polygons, 1)
    return img

opencv有些函数不太熟悉,花了些时间才找到,不过更麻烦的是

怎么在python3中使用opencv,import cv2

幸好只是编译麻烦一些,操作非常简单,看这篇blog

你可能感兴趣的:(opencv)