【问题标题】:RGB image masking using opencv and numpy arrays (shape mismatch)使用 opencv 和 numpy 数组的 RGB 图像遮罩(形状不匹配)
【发布时间】:2022-02-14 18:08:06
【问题描述】:

我在使用蒙版仅保留图像的少数部分时遇到问题。 我做什么:

1 -> 选择我要保留的颜色(OK)

2 -> 我将所有内容都转换为 Lab 空间以计算 deltaE(OK)

3 -> 使用 deltaE 值创建掩码(OK)

4 -> 蒙版的形态开口(OK)

5 -> 将此蒙版应用于原始图像(不行

当我尝试将蒙版应用到图像时,我收到此错误:

"shape mismatch: value array of shape (720,1280,3) could not be broadcast to indexing result of shape (21045,3)"

形状 (720,1280,3) 是我原始图像的形状,但对于第二个形状,每次启动代码时都会得到不同的结果。

所有数据(原始图像和最终图像)均为 720x1280x3,掩码为 720x1280。另外,所有数据都是uint8。

这是我的代码:

couleur_mire = im_Lab[mouseY,mouseX,:]
image_unie = np.ones_like(im) * couleur_mire
video.set(cv2.CAP_PROP_POS_FRAMES,frame_k)
_, im = video.read()
im_Lab = cv2.cvtColor(im, cv2.COLOR_BGR2Lab)
mask = np.zeros((h,w))
im_finale = np.zeros_like(im)
L1 = np.array(im_Lab[:,:,0],dtype=int)
a1 = np.array(im_Lab[:,:,1],dtype=int)
b1 = np.array(im_Lab[:,:,2],dtype=int)
L2 = np.array(image_unie[:,:,0],dtype=int)
a2 = np.array(image_unie[:,:,1],dtype=int)
b2 = np.array(image_unie[:,:,2],dtype=int)
deltaE =np.sqrt(np.multiply(L1-L2,L1-L2) + np.multiply(a1-a2,a1-a2) + np.multiply(b1-b2,b1-b2))
th = 25
mask[deltaE<th] = 1
mask = cv2.morphologyEx(mask,cv2.MORPH_OPEN,np.ones((20,20)))
mask = np.array(mask,dtype=np.uint8)
im_finale = np.zeros_like(im)
im_finale[mask==1] = im <--THIS IS THE LINE THAT DOES NOT WORK

欢迎任何帮助。感谢任何需要一些时间来回答的人:)

编辑:第二个形状随着蒙版的变化而变化(如果我连续两次选择相同的颜色,第二个形状保持不变)

编辑 2 :第二个形状中的第一个值对应于掩码中 1 的数量(在本例中,此掩码保留了 21045 个像素)

编辑 3:当我这样做时,它可以完美运行,但速度太慢:

for i in range(h):
   for j in range(w):
      if mask[i,j]:
         im_finale[i,j,:] = im[i,j,:]

【问题讨论】:

    标签: python numpy opencv


    【解决方案1】:

    根据我的理解,您需要根据您创建的蒙版对图像进行蒙版,您可以使用乘法来实现此效果。

    def mask_image( img, mask ):
       newImg = img.copy()
       newImg[:,:] = img[:,:] * mask[:,:]
       return newImg
    

    有了这个,你不必将掩码转换为 uint8。

    【讨论】:

    • 感谢您的回答。我没有想到使用乘法的可能性。
    猜你喜欢
    • 2020-04-10
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2021-07-20
    相关资源
    最近更新 更多