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