相关疑难解决方法(0)

使用opencv Python删除图像的背景

我有两个图像,一个只有背景,另一个有背景+可检测物体(在我的例子中是一辆汽车).以下是图片

在此输入图像描述

我正在尝试删除背景,以便我在生成的图像中只有汽车.以下是我试图获得所需结果的代码

import numpy as np
import cv2


original_image = cv2.imread('IMG1.jpg', cv2.IMREAD_COLOR)
gray_original = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
background_image = cv2.imread('IMG2.jpg', cv2.IMREAD_COLOR)
gray_background = cv2.cvtColor(background_image, cv2.COLOR_BGR2GRAY)

foreground = np.absolute(gray_original - gray_background)
foreground[foreground > 0] = 255

cv2.imshow('Original Image', foreground)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)

通过减去两个图像得到的图像是

在此输入图像描述

这是问题所在.预期的结果图像应该只是一辆汽车.此外,如果你深入研究两张图像,你会发现它们不完全相同,相机移动了一点,所以背景受到了一点干扰.我的问题是,使用这两个图像我怎样才能减去背景.我现在不想使用grabCut或backgroundSubtractorMOG算法,因为我现在还不知道这些算法里面有什么.

我想要做的是得到以下结果图像 在此输入图像描述

如果可能的话,请指导我这样做的一般方法,不仅在这个特定的情况下,我在一个图像中有背景,在第二个图像中有背景+对象.这可能是最好的方法.对不起这么长的问题.

python opencv numpy image image-processing

17
推荐指数
2
解决办法
3万
查看次数

如何使用分水岭改进图像分割?

我正在开发一个应用程序来检测病变区域,为此我使用抓取来检测 ROI 并从图像中删除背景。但是,在某些图像中,它运行不佳。他最终没有很好地确定感兴趣区域的边界。分水岭可以更好地识别此类工作的边缘,但是我在从抓地到分水岭的过渡过程中遇到了困难。在处理抓取之前,用户使用 touchevent 在感兴趣的图像(伤口区域)周围标记一个矩形,以方便算法的工作。如下图。

但是,使用其他伤口图像,分割效果不佳,显示出 ROI 检测的缺陷。

在应用程序中使用抓取的图像

在桌面中使用分水岭的图像

这是代码:

private fun extractForegroundFromBackground(coordinates: Coordinates, currentPhotoPath: String): String {
    // TODO: Provide complex object that has both path and extension

    val width = bitmap?.getWidth()!!
    val height = bitmap?.getHeight()!!
    val rgba = Mat()
    val gray_mat = Mat()
    val threeChannel = Mat()
    Utils.bitmapToMat(bitmap, gray_mat)
    cvtColor(gray_mat, rgba, COLOR_RGBA2RGB)
    cvtColor(rgba, threeChannel, COLOR_RGB2GRAY)
    threshold(threeChannel, threeChannel, 100.0, 255.0, THRESH_OTSU)

    val rect = Rect(coordinates.first, coordinates.second)
    val fg = Mat(rect.size(), CvType.CV_8U)
    erode(threeChannel, fg, Mat(), Point(-1.0, -1.0), 10)
    val …
Run Code Online (Sandbox Code Playgroud)

java mobile opencv image kotlin

11
推荐指数
1
解决办法
1774
查看次数

Python-OpenCV-裁剪图像并隔离特定对象

使用python-OpenCV,我已成功读取以下图像,检测矩形,裁剪它们并将每个矩形保存为图像。

主图

这是我成功裁剪并另存为图像的矩形的示例。(因此将有12个)

矩形图像

然后处理每个矩形图像,以隔离圆并为每个圆创建一个新图像-使用cv2.HoughCircles我也成功做到了。

图像的输出A包含圆圈,如下所示:

图片包含圆圈等

现在:我需要做的是删除绿色圆圈以外的所有内容,并将绿色圆圈以外的所有内容转换为黑色,然后得到B(仅绿色圆圈):

孤立的图像圈

现在的问题是:如何获得BA

我从OpenCV中获取代码:删除图像的背景,但不适用于该图像A,而是输出此类图像:


这是从OpenCV中获取的代码:删除图像的背景

circle_path_test = 'D:\rec.png'

img  = cv2.imread(circle_path_test)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

## (2) Threshold
th, threshed = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)

## (3) Find the min-area contour
_, cnts, _ = cv2.findContours(threshed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts, key=cv2.contourArea)
for cnt in cnts:
    if cv2.contourArea(cnt) > 100:
        break

## (4) Create mask and do bitwise-op
mask …
Run Code Online (Sandbox Code Playgroud)

python opencv image

2
推荐指数
1
解决办法
6817
查看次数

标签 统计

image ×3

opencv ×3

python ×2

image-processing ×1

java ×1

kotlin ×1

mobile ×1

numpy ×1