【发布时间】:2018-07-29 09:22:30
【问题描述】:
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(gray, gray, mask = mask) cv2.error: /home/... : error: (-215) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize (*psrc1) 在函数 binary_op 中
有人知道我如何在我的 16 位图像上应用蒙版吗?
【问题讨论】:
-
正确格式化您的问题,我希望缺少的
=也只是一个草率 -
另外,你为什么使用 bitwise_and 来应用掩码?
-
我使用 bitwise_and 来应用蒙版,因为我不知道该怎么做。有没有办法屏蔽 16 位图像?
-
如my answer 中所述,
mask需要为 8 位。为什么你希望它是 16 位的?它本质上只是一个布尔数组,由于 C 没有布尔类型,它是一个“无符号整数 8”类型uint8_t。 -
您的掩码是
0s 和255s 的数组。只有一点点信息。您似乎误解了bitwise_and函数的作用。掩码只是图像上的布尔过滤器,它不会降低gray数组的保真度。