java - 如何根据感兴趣区域周围的设计去除图像的背景?

标签 java android opencv kotlin mobile

我正在创建一个应用程序,允许用户从伤口图像中选择感兴趣的区域。一旦通过在屏幕上绘图选择了感兴趣的区域,算法就会从图像中分割并去除背景,留下黑色背景并仅突出显示伤口的那个区域。我仍处于应用程序的初始阶段,今天它只绘制感兴趣的区域,我希望能够以最好的方式进行这种分割,并且它可以用于多个伤口图像,无论是大、小、亮、暗等。
我需要对图像进行分割,以便稍后运行一个算法来对伤口组织进行分类。这就是我需要这种分割的原因。

我正在使用 android 本身的 lib Canvas 进行绘图。
如何使用分水岭,我该如何利用我所拥有的?

申请画面:



在图像中,伤口周围的绿色设计将作为分割算法的引用。

输出示例:

最佳答案

您在 Android 中使用 Java 和 Kotlin,所以我不知道如何在 OpenCV 中使用它们,但我可以给您一个示例,说明如何在 python 中进行操作,希望您可以将其转换为 Java。

创建与输入图像尺寸相同的黑色图像(即全零图像),在您的情况下应该是屏幕。这可以通过 mask = np.zeros((img.shape), dtype=np.uint8) 来完成其中 img 是图像。现在,当用户在屏幕上绘制伤口的边界时,也将其绘制在空白蒙版上。使用 cv2.RETR_EXTERNAL 查找轮廓模式。 python中的语法是:

cnts, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

在此之后,您将拥有一个轮廓,我们将填充该轮廓以获得我们的面具。
cv2.drawContours(mask, cnts, -1, (255, 255, 255), -1)

使用按位制作掩码并提取您的投资返回率。
roi = cv2.bitwise_and(img, img, mask=mask)

如果您可以将其转换为 Java 或 Kotlin,则应该这样做。

关于java - 如何根据感兴趣区域周围的设计去除图像的背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61920859/

相关文章:

c++ - 自由人 : Unable to compile the Java API on Ubuntu

java - 是否可以在变量访问/写入时停止 Debug模式的执行?

java - 如何在android中创建圆角surfaceview

android - 使用时间选项回溯 proguard 整个 logcat

c++ - 使用 base64 编码 CV_32FC1 Mat 数据

opencv - 如何从单个组件创建 2D 透视变换矩阵?

python - 质心计算程序中的时间滞后

java - 对于不存在的测试套件,AssertionFailedError Forked Java VM 异常退出

java - 如何更改 java.sql.Connection con;进口申报和连接con;

java - 将毫秒转换为 24 小时格式?