gpt4 book ai didi

c++ - 删除图像中的小背景(黑色)区域

转载 作者:太空宇宙 更新时间:2023-11-03 22:04:49 27 4
gpt4 key购买 nike

附上图片。我能够摆脱边界上的背景区域,但图像中的背景区域仍然存在。有没有什么方法可以消除图像中的小背景区域。谢谢。 enter image description here

最佳答案

这个问题有一个简单的解决方法,基本思想是在 RGB 颜色空间中分割图像以过滤掉图像中留下的黑色部分,可以简单地实现为:

import cv2
import numpy as np

ornament_image = cv2.imread("/Users/anmoluppal/Desktop/outputs/ornament.jpg")

#Considering the black range of background pixels
thresh = cv2.inRange(ornament_image, np.array([0, 0, 0]), np.array([55, 55, 55]))

contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

cv2.drawContours(ornament_image, contours, -1, (255,255,255), -1)
#Replace the contours with the white color same as the background

enter image description here

但这会去除装饰图像中一些非常小的黑色部分,为了保留这些部分,我们可以通过根据轮廓区域对它们进行排序来过滤掉一些轮廓

thresh = cv2.inRange(ornament_image, np.array([0, 0, 0]), np.array([55, 55, 55]))

contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

contours = sorted(contours, key = cv2.contourArea, reverse = True)[:len(contours)/20]

cv2.drawContours(ornament_image, contours, -1, (255,255,255), -1)

注意:此方法也可以保留一些黑色背景噪声

enter image description here

进一步改进:

  • YCrCb 分割:如果您对 RGB 分割不满意,那么您也可以尝试对给定图像进行 YCrCb 分割,这通常用于数字图像。

    <
  • Masking :您可能也注意到了这一点,由于黑色补丁,装饰品的 Green Gem 内部的黑色也与背景融合在一起在其中,可以通过创建一个会阻碍给定 ROI 中的任何分割的掩码来移除它,因此保留了必要的细节,但这需要人工干预。

关于c++ - 删除图像中的小背景(黑色)区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33117974/

27 4 0
文章推荐: node.js - Docker compose 无法正确复制文件来运行 React 应用程序
文章推荐: html - 如何设置或标签的高度?