如何在高分辨率图像中提取对象?

问题描述 投票:0回答:1

我正在用DSLR相机拍摄封闭的图像,但也可以看到放置物体的背景。我想从背景中裁剪对象。图像尺寸为(3456,5184,3)

示例图像:

enter image description here

我尝试了多种可用的解决方案,例如,使用openCV方法,例如使用抓取的前景提取,图像阈值和遮罩,边缘检测,结果均不令人满意。

[请提出正确的方法。

image opencv deep-learning computer-vision crop
1个回答
0
投票

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

  • 灰度然后是高斯模糊
  • 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()
© www.soinside.com 2019 - 2024. All rights reserved.