删除对象的背景&将对象的大小调整为其在fabric js中的内容

时间:2018-04-24 22:03:02

标签: javascript image image-processing fabricjs

不确定我是否在问题中添加了正确的标题。

在我的项目中,用户将衣服项目放到画布上。通常服装项目有一些白色背景,看起来像这样:

enter image description here

我应用RemoveColor过滤器并删除白色背景。但是这个物体仍然具有与之前相同的尺寸。我想要的是像这样剪辑图像:

enter image description here

删除不必要的背景。

我怎么能这样做,是否可以呢?

1 个答案:

答案 0 :(得分:2)

一般管道如下:

  1. 加载图像并转换为灰度
  2. 阈值图像并获取二进制图像
  3. 应用形态学操作,在你的情况下关闭应该这样做。反转图像以获得黑色背景和白色前景。
  4. 查找已连接的区域,并选择最大的感兴趣区域
  5. 裁剪出来。
  6. 修改 以下是Python中的一些示例代码(使用opencv和skimage库)。

    img = cv2.imread('test2.png')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    t, bw_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    
    closing = cv2.morphologyEx(bw_img, cv2.MORPH_CLOSE, np.ones((3, 3)))
    closing = cv2.bitwise_not(closing)
    
    labels, num = measure.label(closing, background=0, connectivity=2, return_num=True)
    max_size, max_blob = 0, None
    for l in range(1, num+1):
        blob = np.zeros_like(labels)
        blob[labels == l] = 1
        nz = np.count_nonzero(blob)
        if nz > max_size:
            max_size = nz
            max_blob = blob
    assert(max_blob is not None)
    
    x, y = np.nonzero(max_blob)
    xmin, xmax = min(x), max(x)
    ymin, ymax = min(y), max(y)
    max_blob = max_blob[xmin: xmax, ymin:ymax]
    # Resized color image
    img = img[xmin: xmax, ymin:ymax]
    

    EDIT2 与代码步骤对应的图片 enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here