**彩色原图叠加彩色分割mask**

彩色原图叠加彩色分割mask

opencv是非常强大的图像处理软件,现在,在python中也有了opencv模块,使用起来非常方便,本文主要介绍实现在一张彩色原图中,根据分割的二值化mask得到一张叠加图像,该图像中同时显示原图以及分割的彩色mask。

1、图片读取
import cv2
cv2.imread(path,args)
其中,args对于不同格式的图片有不同的含义。
对于灰度图像还是彩色图像,参数cv2.IMREAD_GRAYSCALE代表读取灰度图,默认为三通道图。

2、生成二维mask
注意的是,mask的分割要先从原图中分离出背景,因此,为了使用按位与的操作,所以要将mask中的背景设为1,目标设为0.

3、利用bitwise_and()分割出背景
通过将原图与mask按位与操作,背景将被保留,目标区域变为0。需要注意的是,mask必须为2维,否则会报错,还有,需要注意参与运算的两幅图像数据类型需要保持一致。

4、利用add()添加彩色mask
首先,根据原来的mask生成目标位置区域为彩色,其他区域为[0,0,0]的mask。然后,利用add()函数叠加两幅图像。
完整代码如下:
#encode UTF-8
import cv2
import numpy as np

image = cv2.imread(’/Users/liangzi/Desktop/4-5b.tif’)
mask_2d = cv2.imread(’/Users/liangzi/Desktop/BZ4-5_road.png’,cv2.IMREAD_GRAYSCALE)

print(mask_2d.shape)
h,w = mask_2d.shape

mask_3d = np.ones((h,w),dtype = ‘uint8’)*255
mask_3d_color = np.zeros((h,w,3),dtype=‘uint8’)
mask_3d[mask_2d[:,:] == 255] = 0

cv2.imshow(‘image mask_2d:’,mask_3d)
k = cv2.waitKey(0)&0xFF
if k == 27:
cv2.destroyAllWindows()

image.astype(‘uint8’)
beijing = cv2.bitwise_and(image, image, mask=mask_3d)
cv2.imshow(‘beijing:’,beijing)
k = cv2.waitKey(0)&0xFF
if k == 27:
cv2.destroyAllWindows()

mask_3d_color[mask_2d[:,:] == 255] = [128,128,0]
add_image = cv2.add(image,mask_3d_color)
cv2.imwrite(’/Users/liangzi/Desktop/added.png’,add_image)
cv2.imshow(‘hunhe:’,add_image)
k = cv2.waitKey(0)&0xFF
if k == 27:
cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/z5217632/article/details/83009748