专栏首页小鹏的专栏python下使用cv2.drawContours填充轮廓颜色

python下使用cv2.drawContours填充轮廓颜色

在使用cv2.drawContours进行轮廓的颜色填充时要注意一点:

(1)颜色填充时:给其传参数的时候,需要搞一个轮廓的list给他,要不会导致颜色填充失败。

(2)画轮廓线时:就没必要搞list了,直接contours[i]就可以。

python代码:

图片:背景为黑色,有很多白色填充的。

下面代码是去除图片中自定义面积小的轮廓, 将大的轮廓填充为白色。

import cv2

imgfile = "IMG_3200.png"
img = cv2.imread(imgfile)
h, w, _ = img.shape

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# Find Contour
_, contours, hierarchy = cv2.findContours( thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)

# 需要搞一个list给cv2.drawContours()才行!!!!!
c_max = []
for i in range(len(contours)):
    cnt = contours[i]
    area = cv2.contourArea(cnt)

    # 处理掉小的轮廓区域,这个区域的大小自己定义。
    if(area < (h/10*w/10)):
        c_min = []
        c_min.append(cnt)
        # thickness不为-1时,表示画轮廓线,thickness的值表示线的宽度。
        cv2.drawContours(img, c_min, -1, (0,0,0), thickness=-1)
        continue
    #
    c_max.append(cnt)
    
cv2.drawContours(img, c_max, -1, (255, 255, 255), thickness=-1)

cv2.imwrite("mask.png", img)
cv2.imshow('mask',img)
cv2.waitKey(0)

下面代码是只保留最大轮廓,填充为白色。

import cv2  
  
imgfile = "IMG_3200.png"  
img = cv2.imread(imgfile)  
h, w, _ = img.shape  
  
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
  
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)  
  
# Find Contour  
_, contours, hierarchy = cv2.findContours( thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)  
  
# 需要搞一个list给cv2.drawContours()才行!!!!!  
c_max = []
max_area = 0
max_cnt = 0
for i in range(len(contours)):
    cnt = contours[i]
    area = cv2.contourArea(cnt)
    # find max countour
    if (area>max_area):
	if(max_area!=0):
	    c_min = []
	    c_min.append(max_cnt)
	    cv2.drawContours(img, c_min, -1, (0,0,0), cv2.FILLED)
	max_area = area
	max_cnt = cnt
    else:
	c_min = []
	c_min.append(cnt)
	cv2.drawContours(img, c_min, -1, (0,0,0), cv2.FILLED)

c_max.append(max_cnt)


cv2.drawContours(img, c_max, -1, (255, 255, 255), thickness=-1)  
  
cv2.imwrite("mask.png", img)  
cv2.imshow('mask',img)  
cv2.waitKey(0)  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • opencv 图像轮廓的实现示例

    Contours:轮廓 轮廓是将没有连着一起的边缘连着一起。 边缘检测检测出边缘,边缘有些未连接在一起。

    砸漏
  • 使用Python-OpenCV消除图像中孤立的小区域操作

    后面需要将相应算法翻译到C++环境中,而Skimage没有对应的C++版本,为了确保python算法和C++算法结果的一致性,需要进行迁移,因而打算使用Open...

    砸漏
  • 基于Opencv的抠图

    step2:用Sobel算子计算x,y方向上的梯度,之后在x方向上减去y方向上的梯度,通过这个减法,我们留下具有高水平梯度和低垂直梯度的图像区域。

    狼啸风云
  • opencv 9 -- 轮廓 找 和 画

    轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。 轮廓在形状分析和物体的检测和识别中很有用

    wust小吴
  • opencv 9 -- 轮廓 性质

    wust小吴
  • 笔记分享 : OpenCV中的常用边缘检测算法

    哈喽,大家好,我们今天了解一下OpenCV中的边缘检测功能实现。在一些案例中,我们需要对物体进行边缘检测,而且是越精准越好。那么,OpenCV提供了哪些边缘检测...

    唐国梁Tommy
  • 使用 Python 通过基于颜色的图像分割进行物体检测

    如果你已经安装了jupyter notebook或者一个IDE,你可以运行python然后下载OpenCV,只需要跳到执行即可。

    AI研习社
  • OpenCV技巧 | 二值图孔洞填充方法与实现(附源码)

    为什么要做孔洞填充?因为在部分情况下,二值图内部的孔洞和外部轮廓是一个整体,填充孔洞可以方便后续处理,减少干扰。

    Color Space
  • Python opencv图像处理基础总结(六) 直线检测 圆检测 轮廓发现

    叶庭云
  • Python实现图片查找轮廓、多边形拟合、最小外接矩形代码

    经常用到轮廓查找和多边形拟合等opencv操作,因此记录以备后续使用。本文代码中的阈值条件对图片没有实际意义,仅仅是为了测试。

    砸漏
  • OpenCV与图像处理(二)

    以下代码均在python3.6,opencv4.2.0环境下试了跑一遍,可直接运行。

    Must
  • OpenCV-简易答题卡识别

    参考自:https://www.pyimagesearch.com/2016/10/03/bubble-sheet-multiple-choice-scanne...

    xxpcb
  • 体感游戏 | 手势识别玩飞机大战游戏(二) Python+OpenCV实现简易手势识别功能

    今天是第二部分:Python+OpenCV实现简易手势识别功能。简易的手势识别,所以功能也很简单,识别手势1~5就行,当然我们控制飞机时只需要用到最多3...

    Color Space
  • Opencv - Contours 属性及操作 Python API

    cv2.findContours函数输入有三个参数: - thresh: source image - cv2.RETR_TREE: 轮...

    AIHGF
  • 应用实例 | 手把手教你用OpenCV实现餐盘水果识别计价程序(附代码)

    (1)餐盘颜色共三种:白色、绿色、橙色,形状共两种:圆形和方形。区别颜色使用HSV阈值范围筛选即可,圆形与方形通过轮廓面积与轮廓最小外接圆面积的比值来筛选,圆形...

    Color Space
  • python实现手势识别的示例(入门)

    使用open-cv实现简单的手势识别。刚刚接触python不久,看到了很多有意思的项目,尤其时关于计算机视觉的。网上搜到了一些关于手势处理的实验,我在这儿简单的...

    砸漏
  • cv2.drawContours

    1.1什么是轮廓 轮廓可以简单认为成连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。

    狼啸风云
  • 如何教电脑玩Spot it!使用OpenCV和深度学习

    爱好是玩棋盘游戏,因为对CNN有所了解,所以决定开发一种可以在纸牌游戏中击败人类的应用程序。想使用我自己的数据集从头开始构建模型,以查看使用小数据集从头开始的模...

    代码医生工作室
  • OpenCV 对轮廓的绘图与筛选操作总结

    OpenCV利用findContours找到图像中的轮廓,根据这些轮廓的特征进行筛选有利于进一步逼近最终的兴趣区域,减少其他算法的时间,提高代码的运行效率,而对...

    chaibubble

扫码关注云+社区

领取腾讯云代金券