【问题标题】:How to extract object in high resolution images?如何在高分辨率图像中提取对象?
【发布时间】:2020-02-15 10:09:11
【问题描述】:

我有一张通过数码单反相机拍摄的封闭图像,但它的背景也可以看到放置对象的位置。我想从背景中裁剪对象。图片大小为(3456,5184,3)

示例图片:

我尝试了各种可用的解决方案,例如,使用 openCV 方法,例如使用抓取切割的前景提取、图像阈值处理和遮罩、边缘检测结果不理想。

请提出正确的方法。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请考虑taking the tour,并在此处查看how to ask(好)问题。请为您的问题提供minimal reproducible example,并显示您迄今为止尝试过的任何相关代码。
  • 一个好的方法是用对比背景,没有阴影和良好的照明更优化地拍摄您的对象......

标签: image opencv deep-learning computer-vision crop


【解决方案1】:

这是一种使用阈值+轮廓提取的方法

  • 灰度然后高斯模糊
  • 二值图像的 Otsu 阈值
  • 扩张以连接成单个轮廓
  • 使用 numpy 切片提取 ROI

转换为灰度和高斯模糊后,我们大津的阈值

现在我们有了所需的白色前景对象,因此我们膨胀以连接轮廓以形成单个轮廓

最后我们得到边界框坐标并提取 ROI

import cv2

# Grayscale, Blur, Otsu's threshold then dilate
image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25,25))
dilate = cv2.dilate(thresh, kernel, iterations=3)

# Extract ROI
x,y,w,h = cv2.boundingRect(dilate)
ROI = image[y:y+h, x:x+w]

cv2.imshow('thresh', thresh)
cv2.imshow('dilate', dilate)
cv2.imshow('ROI', ROI)
cv2.waitKey()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-04
    • 2013-01-06
    • 1970-01-01
    • 2012-11-19
    • 2017-08-23
    • 1970-01-01
    • 2010-10-19
    • 2020-12-28
    相关资源
    最近更新 更多