gpt4 book ai didi

python opencv 找出图像中的最大轮廓并填充(生成mask)

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 40 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python opencv 找出图像中的最大轮廓并填充(生成mask)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文主要介绍了python opencv 找出图像中的最大轮廓并填充,分享给大家,具体如下:

  1. import cv2
  2. import numpy as np
  3. from PIL import Image
  4.  
  5. from joblib import Parallel
  6. from joblib import delayed
  7. # Parallel 和 delayed是为了使用多线程处理
  8. # 使用前需要安装joblib:pip install joblib
  9.  
  10. # img_stack的shape为:num, h, w
  11. # 是三维的图像,可以理解为是num张二维的图像组成
  12. # mask是用来保存最后的结果的
  13. mask = np.ones_like(img_stack)
  14. for i in range(num):
  15. # 阈值化
  16. _, binaryzation = cv2.threshold(img_stack[i], 5, 255, cv2.THRESH_BINARY_INV)
  17. # 找到所有的轮廓
  18. contours, _ = cv2.findContours(binaryzation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
  19. area = []
  20. # 找到最大的轮廓
  21. for k in range(len(contours)):
  22. area.append(cv2.contourArea(contours[k]))
  23. max_idx = np.argmax(np.array(area))
  24. # cv2.fillContexPoly(mask[i], contours[max_idx], 0)
  25. # 填充最大的轮廓
  26. cv2.drawContours(mask[i], contours, max_idx, 0, cv2.FILLED)
  27. del area
  28.  
  29. # 保存
  30. def _write_mask(mask, i):
  31. Image.fromarray(mask.astype(np.uint8)*255).save(os.path.join(path, 'm%d.png' % i))
  32.  
  33. # 使用多线程进行保存
  34. num_cores = 10
  35. parallel = Parallel(n_jobs=num_cores, backend='threading')
  36. parallel(delayed(_write_mask)(mask[i, :, :], i) for i in range(0, num))

之前偷懒直接将项目里面的代码段扣下来放在这里,误导了大家,抱歉 。

这次我重新放一个完整版本,希望对大家有所帮助~~ 。

代码在python 3.7.6 和opencv-python 4.3.0下测试成功 。

  1. import cv2
  2. import numpy as np
  3.  
  4. # 以灰度方式读取图像
  5. img = cv2.imread('img.png', cv2.IMREAD_GRAYSCALE)
  6. mask = img.copy()
  7.  
  8. # 二值化,100为阈值,小于100的变为255,大于100的变为0
  9. # 也可以根据自己的要求,改变参数:
  10. # cv2.THRESH_BINARY
  11. # cv2.THRESH_BINARY_INV
  12. # cv2.THRESH_TRUNC
  13. # cv2.THRESH_TOZERO_INV
  14. # cv2.THRESH_TOZERO
  15. _, binaryzation = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY_INV)
  16.  
  17. # 找到所有的轮廓
  18. contours, _ = cv2.findContours(binaryzation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
  19.  
  20. area = []
  21.  
  22. # 找到最大的轮廓
  23. for k in range(len(contours)):
  24. area.append(cv2.contourArea(contours[k]))
  25. max_idx = np.argmax(np.array(area))
  26.  
  27. # 填充最大的轮廓
  28. mask = cv2.drawContours(mask, contours, max_idx, 0, cv2.FILLED)
  29.  
  30. # 保存填充后的图像
  31. cv2.imwrite('masked.png', mask)

输入图像:

python opencv 找出图像中的最大轮廓并填充(生成mask)

输出图像:

python opencv 找出图像中的最大轮廓并填充(生成mask)

到此这篇关于python opencv 找出图像中的最大轮廓并填充(生成mask)的文章就介绍到这了,更多相关opencv最大轮廓内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/qq_33757398/article/details/96174768 。

最后此篇关于python opencv 找出图像中的最大轮廓并填充(生成mask)的文章就讲到这里了,如果你想了解更多关于python opencv 找出图像中的最大轮廓并填充(生成mask)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com