python - 如何用白色填充闭合轮廓区域

标签 python opencv image-processing image-segmentation scikit-image

我正在尝试仅使用 ROI 在细胞图像中做一个蒙版,因此我在 ROI 周围使用 OpenCV 应用了轮廓,但我一直在努力使区域位于轮廓内。我想让这个区域内部为白色,然后丢弃轮廓和外部的其余部分。

cell = cv.imread(original, 0) # original cell image after matching template
imgray = cv.cvtColor(cell,cv.COLOR_BGR2GRAY) 
ret,thresh_binary = cv.threshold(imgray,127,255,cv.THRESH_BINARY)

生成的图像是:

image 1

原来的是:

image 2

从另一幅图像匹配模板和已经标记好的细胞轮廓后,代码中读取的图像:

image 3

所以基本上我需要的是在那个封闭的轮廓区域有白色并丢弃所有其余部分(即黑色)。 有人可以给我一些帮助或提示我该怎么做吗?

最佳答案

这是一种方法:

  • 将图像转换为灰度
  • 找到轮廓并填充轮廓
  • 执行形态转换以删除不需要的部分

我们找到轮廓然后用 cv2.drawContours() 填充轮廓使用 -1 作为厚度参数

要删除行部分,我们可以使用 morphological transformations

import cv2

image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

cnts = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

for c in cnts:
    cv2.drawContours(gray,[c], 0, (255,255,255), -1)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (20,20))
opening = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel, iterations=2)

cv2.imshow('gray', gray)
cv2.imshow('opening', opening)
cv2.imwrite('opening.png', opening)
cv2.waitKey(0)

关于python - 如何用白色填充闭合轮廓区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57517741/

相关文章:

opencv - Flann 函数 Unresolved external 问题

python-3.x - TypeError : Layout of the output array img is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)

java - 如何更快地处理 BufferedImage

matlab - 在 MATLAB 中使用颜色直方图进行基于内容的图像检索和精确调用图

python - 使用 Python BeautifulSoup 提取 HTML 表

python manage.py migrate 返回 django.db.utils.ProgrammingError : (1064. .. 错误

c# - 浏览 FindContours 方法找到的轮廓层次结构?

c++ - 是否有任何好的算法实现来检测相似图像?

python - 查找包含 'inf' 或 'nan' 的项目的索引

python - 如何在 Mac 上安装多语言?