【发布时间】:2019-12-24 22:21:24
【问题描述】:
我正在做单元格分割,所以我正在尝试编写一个函数来删除主要轮廓周围的所有次要轮廓,以便做一个遮罩。 发生这种情况是因为我加载了带有一些颜色标记的图像:
问题是当我做阈值时,它假定颜色标记之间的“框”是主轮廓的一部分。
正如您在我的代码中看到的那样,我不直接将彩色图像传递给灰色,因为红色会变成黑色,但也有其他颜色,至少 8 种,并且每张图像总是不同的。我有成千上万张这样的图像,其中只显示一个单元格,但在大多数情况下,总是附加外部轮廓。我的目标是找到一个函数,它为每个图像输入提供单个单元格的二进制图像,就像这样。所以我从这段代码开始:
import cv2 as cv
cell1 = cv.imread(image_cell, 0)
imgray = cv.cvtColor(cell1,cv.COLOR_BGR2HSV)
imgray = cv.cvtColor(imgray,cv.COLOR_BGR2GRAY)
ret,thresh_binary = cv.threshold(imgray,107,255,cv.THRESH_BINARY)
cnts= cv.findContours(image =cv.convertScaleAbs(thresh_binary) , mode =
cv.RETR_TREE,method = cv.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
cv.drawContours(thresh_binary,[c], 0, (255,255,255), -1)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (3,3))
opening = cv.morphologyEx(thresh_binary, cv.MORPH_OPEN, kernel,
iterations=2) # erosion followed by dilation
总结一下,我如何从图像 1 中获得红色轮廓?
【问题讨论】:
标签: python image opencv computer-vision scikit-image