San*_*ino 2 opencv image-processing computer-vision python-2.7
我有一系列同心矩形,并希望获得除内部矩形之外的外部矩形的均值。参见附图,我需要获取阴影区域的平均值。

因此,我正在使用内部矩形的遮罩传递给cv2.mean方法,但不确定如何设置遮罩。我有以下代码:
for i in xrange(0,len(wins)-2,1):
means_1 = cv2.mean(wins[i])[0]
msk = cv2.bitwise_and(np.ones_like((wins[i+1]), np.uint8),np.zeros_like((wins[i]), np.uint8))
means_2 = cv2.mean(wins[i+1],mask=msk)
means_3 = cv2.mean(wins[i+1])[0]
print means_1,means_2,means_3
Run Code Online (Sandbox Code Playgroud)
我收到此错误的means_2(means_3正常).:
错误:/Users/jenkins/miniconda/0/2.7/conda-bld/work/opencv-2.4.11/modules/core/src/arithm.cpp:1021:错误:(-209)该操作都不是'array op数组”(其中数组具有相同的大小和类型),在binary_op函数中也不是“数组运算标量”或“标量运算数组”
此处的蒙版是指具有0背景和255前景的二进制蒙版,因此您需要使用默认的color =创建一个空蒙版,0然后使用绘制要查找平均值的感兴趣区域255。假设我有输入图片[512 x 512]:
让我们假设2个同心矩形为:
outer_rect = [100, 100, 400, 400] # top, left, bottom, right
inner_rect = [200, 200, 300, 300]
Run Code Online (Sandbox Code Playgroud)
现在,使用以下矩形创建二进制掩码:
mask = np.zeros(image.shape[:2], dtype=np.uint8)
cv2.rectangle(mask, (outer_rect[0], outer_rect[1]), (outer_rect[2], outer_rect[3]), 255, -1)
cv2.rectangle(mask, (inner_rect[0], inner_rect[1]), (inner_rect[2], inner_rect[3]), 0, -1)
Run Code Online (Sandbox Code Playgroud)
现在您可以调用cv2.mean()以获得前景区域的平均值,标记255为:
lena_mean = cv2.mean(image, mask)
>>> (109.98813432835821, 96.60768656716418, 173.57567164179105, 0.0)
Run Code Online (Sandbox Code Playgroud)