【发布时间】:2018-09-19 07:28:05
【问题描述】:
我在 OpenCV 中定义并填充了一组轮廓,我试图将其用作掩码来查找每个 ROI 中的平均强度。我想我可以使用带有定义掩码的cv2.mean 函数来做到这一点。我的代码是(im2 是从文件中读取的图像):
msk = np.zeros(im2.shape, np.uint8)
cv2.bilateralFilter(im2, 5, 200, 5)
im2 = cv2.GaussianBlur(im2,(5,5),0
binImg = cv2.adaptiveThreshold(im2, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 55, -5)
contours, heir = cv2.findContours(binImg, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(msk, contours, -1, 255, -1)
print len(contours)
print cv2.mean(im2, mask = msk)
这会返回:
3361
(155.88012076286788, 0.0, 0.0, 0.0)
我以为我会得到每个轮廓的平均强度,但它看起来像是每个通道的整体平均强度(图像是灰度的)。是我的期望不正确,还是我的代码不正确?
【问题讨论】:
-
所以,您已将所有 3361 个轮廓(填充)绘制成黑色图像,该图像的平均灰度值为 156。“我认为我会得到每个轮廓的平均强度”-明显的期望不匹配。
-
你想要做什么? “每个轮廓的平均强度”甚至意味着什么?
-
不完全。我已将所有 3361 轮廓(填充)绘制到黑色图像上,并使用该图像作为灰度图像上的蒙版来计算平均值。我没有计算掩码的平均值。
-
@berak,我认为你误解了我的问题。我想使用蒙版图像来定义一组 ROI,并计算每个 ROI 处原始灰度图像 (
im2) 的平均强度。 -
是的,我部分误解了你。仍然,您必须计算每个 roi(每个轮廓?)的东西,而不是整个图像。