我正在处理此代码以执行前景提取,但我不了解mask2 = np.where((mask==2 | (mask == 0), 0, 1).astype('uint8'))
和img = img*mask2[:, :, np.newaxis]
行的含义。这是代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('tut12img.jpg')
mask = np.zeros(img.shape[:2], np.uint8)
bgdModel = np.zeros((1,65), np.float64)
fgdModel = np.zeros((1,65), np.float64)
rect = (161, 79, 150, 150)
cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
img = img*mask2[:, :, np.newaxis]
plt.imshow(img)
plt.colorbar()
plt.show()
为什么麝香在2或0时为零?这有什么特别之处?什么样的基质是musk2?谢谢!
答案 0 :(得分:0)
mask2是前景蒙版。所以你只使用前景像素,这是通过设置每个背景像素0来完成的,否则为1
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
将像素分为4类。
背景(0)
前景(1)
可能是背景(2)
可能是前景(3)
当然,如果该代码的作者使用了正确的标志,如cv2.GC_BGD而不是0,那就更明显了......
另外,mask2可能不是最具信息性的名称。
这一切都在OpenCV手册中。你所要做的就是谷歌1-2字,阅读1段...
http://docs.opencv.org/3.2.0/d7/d1b/group__imgproc__misc.html#ga909c1dda50efcbeaa3ce126be862b37f
掩码输入/输出8位单通道掩码。掩码初始化 通过模式设置为GC_INIT_WITH_RECT时的功能。它的元素 可能有一个cv :: GrabCutClasses。
和
enum cv :: GrabCutClasses
GrabCut算法中的像素类
GC_BGD明显的背景像素
GC_FGD一个明显的前景(对象)像素
GC_PR_BGD可能的背景像素
GC_PR_FGD可能的前景像素