【发布时间】:2019-11-12 11:42:50
【问题描述】:
您好,我正在尝试从一组图像中检索区域。我对图像和蒙版使用了 bitwise_and 操作来获取区域,但这样做会导致结果图像的亮度发生变化。所以,我想从图像中逐个像素地检索这些区域,并将它们放在另一个空白图像中。
更新:目前,我在面具中有三个区域(白色、灰色和黑色)。我希望能够选择一个区域(例如白色或灰色),然后对于该特定区域,它应该提取相应区域的图像。
for im in glob.glob(path_to_images):
image = cv2.imread(im)
canny = auto_canny(image)
image[(image< 50)] = 0
gray_mask = image[(image>= 50) & (image< 100)] = 100
white_mask = image[image> 110] = 255
if(white_mask):
res = cv2.bitwise_and(img, img, mask = white_mask )
white_inv= cv2.bitwise_not(white_mask)
alt_ = cv2.bitwise_and(img_1, img_1, mask = white_inv)
result = cv2.add(alt_, res)
elif(gray_mask):
res = cv2.bitwise_and(img, img, mask = gray_mask )
gray_inv= cv2.bitwise_not(gray_mask)
alt_ = cv2.bitwise_and(img_1, img_1, mask = gray_inv)
result = cv2.add(alt_, res)
cv2.imshow("result",result)
cv2.waitKey(0)
我已经尝试过了,但是提取的区域会导致亮度增加。
更新 2: 我尝试了@ZdaR 给出的解决方案,但出现以下错误:“error: (-215) (mtype == 0 || mtype == 1) && _mask.函数 cv::binary_op 中的 sameSize(*psrc1)"
【问题讨论】:
-
请为您的具体问题和图片提供一个最小、完整且可验证的示例。您应该能够使用 numpy 切片来提取这些区域,甚至将它们放入新的空白图像中。
-
@fmw42 添加了具有当前输出和预期输出的示例图像
-
@fmw42 所以我现在的理解是,对于蒙版的灰色区域,亮度会增加,但对于白色区域,它仍然可以正确提取区域。
-
“预期输出”显示 404 错误。所以我不确定你想要什么。你为什么要尝试使用灰色部分?为什么不只是白色的门槛。然后 bitwise_and 应该按照您期望的方式工作。你对用灰色部分遮罩有什么期望?也许您想要的是让您的蒙版在 0 到 1 的范围内浮动,然后将蒙版与图像相乘。这将降低蒙版中灰色区域的亮度。 1 将屏蔽为无变化,0 将屏蔽为黑色。
-
请提供完整代码,以便其他人可以使用您的图像对其进行测试。请阅读此论坛的帮助部分,了解为您的特定问题提供一个最小、完整且可验证的示例
标签: python numpy opencv image-processing