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位图像吗?
答案 0 :(得分:2)
根据OpenCV documentation,mask
需要为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