如何将蒙版应用于16位图像?

时间:2018-02-19 07:11:04

标签: python opencv

apply mask like this to an image

如何将蒙版应用于16位图像?使用以下代码的8位图像可以正常工作:

image = misc.imread('test.jpg')
gray = cv2.cvtColor(image, cv2.Color(image, cv2.COLOR_BGR2GRAY)
x = 610
y = 220
w = h = 150
mask = np.zeros(gray.shape[:2], np.uint8)
mask[y:y+h,x:x+w] = 255
res = cv2.bitwise_and(gray, gray, mask = mask)
cv2.imshow("res", res)
cv2.waitKey(0)

但是当我尝试使用16 bit.png图片时,它不起作用。我试过这段代码:

mask = np.zeros(gray.shape[:2], np.uint16)
mask[y:y+h, x:x+w] = 6535
res = cv2.bitwise_and(gray, gray, mask = mask)

我收到错误:

  

res = cv2.bitwise_and(grey,gray,mask = mask)cv2.error:/ home / ...:error:(-215)(mtype == CV_8U || mtype == CV_8S)&&函数binary_op

中的_mask.sameSize(* psrc1)

有人知道如何将掩码应用于我的16位图像吗?

2 个答案:

答案 0 :(得分:2)

根据OpenCV documentationmask需要为8位:

  

mask - 可选操作掩码,8位单通道数组,指定要更改的输出数组的元素。

错误消息似乎反映了这一点,

  

res = cv2.bitwise_and(grey,gray,mask = mask)cv2.error:/ home / ...:error:(-215)(mtype == CV_8U || mtype == CV_8S)&&函数binary_op

中的_mask.sameSize(* psrc1)

因为它告诉你掩码的日期类型需要是8位无符号或8位有符号(整数)。

所以你的面具的定义必须是

mask = np.zeros(gray.shape[:2], np.uint8)
mask[y:y+h,x:x+w] = 255
和以前一样。

答案 1 :(得分:1)

尝试

mask = np.zeros(gray.shape[:2], np.uint16)
mask[y:y+h, x:x+w] = 1
res = gray * mask