【问题标题】:Remove object's background & resize object to its content in fabric js删除对象的背景并将对象调整为其在fabric js中的内容
【发布时间】:2018-10-05 06:48:50
【问题描述】:

不确定我是否在问题中输入了正确的标题。

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

我应用 RemoveColor 过滤器并删除白色背景。但是该对象仍然具有与以前相同的大小。我想要的是这样的剪辑图像:

去除不必要的背景。

我该怎么做?有可能吗?

【问题讨论】:

    标签: javascript image image-processing fabricjs


    【解决方案1】:

    一般管道如下:

    1. 加载图像并转换为灰度
    2. 阈值图像并得到二值图像
    3. 应用形态学运算,在你的情况下关闭应该这样做。反转图像以获得黑色背景和白色前景。
    4. 查找连接区域并选择最大的区域作为您感兴趣的区域
    5. 裁剪出来。

    编辑 这是 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 对应代码步骤的图片

    【讨论】:

    • 非常感谢您提供如此详细的解释!
    猜你喜欢
    • 2016-02-01
    • 2021-04-21
    • 2018-08-07
    • 2021-01-14
    • 2018-05-04
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2021-08-09
    相关资源
    最近更新 更多