前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python下使用cv2.drawContours填充轮廓颜色

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

作者头像
MachineLP
发布2018-01-09 15:20:04
16.3K0
发布2018-01-09 15:20:04
举报

在使用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)  
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年08月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档