【简化版蒙板扣图】带你轻松走进OPENCV蒙板扣图的世界

蒙板扣图的学习目标:

图像素材:
【简化版蒙板扣图】带你轻松走进OPENCV蒙板扣图的世界_第1张图片

本操作适用图片:

-前景清晰,背景模糊的原始图片


自定义库:

把OPENCV中的干扰理解的部分,制作成独立的库文件,这样学友们就可以轻松的理解蒙板扣图的真正含义。

自定义的方法名称:

  1. show2img:可以同时显示两种图片img,mask的类方法。
  2. imrd() 方法可以获取原图
  3. contourShape.findContours()通过寻找轮廓方法获取三个返回值

蒙板扣图原理:

掩模图像M中只有两种值:一种是数值0,另外一种是数值255。
255

  • 得到的轮廓白色轮廓图:
    【简化版蒙板扣图】带你轻松走进OPENCV蒙板扣图的世界_第2张图片
    轮廓中白色部分:255r的值,对应到img原图位置的所有像素点都会显示,如图:
    【简化版蒙板扣图】带你轻松走进OPENCV蒙板扣图的世界_第3张图片

完整代码:

from img_pakage.ocv import imrd,contourShape,show_img,show2img
import numpy as np
import cv2

'''
分析图像:
    因为图像是一个背景和前景区分比较明显的图形,背景模糊而前景清晰,所以适合使用二值分割,加轮廓提取的办法。
原理:
    1、生成一个全黑的0数组底图,然后使用绘制全部轮廓的方法,绘制一个纯白轮廓图。(值:255)
    2、利用bitwise_and(img,mask) 使用蒙板进行原图img中蒙板部分提取(原理:值为255部分显示图像,其它隐藏)
    
'''
img_path = f'../img/exam_flower.png' #图片文件本地路径
img = imrd(img_path) #通过读取数据,获取原图
binary,cnt,hie = contourShape.findContours(img_path) #通过轮廓命令获取二值图,轮廓图,层级列表
mask = np.zeros(img.shape,np.uint8) #通过全0数组获取与图像等大蒙板
mask = cv2.drawContours(mask,cnt,-1,(255,255,255),-1) # 把全部轮廓(cnt)(-1)通过绘制,进行填充绘制(-1:尾部)然后输出到蒙板mask。
loc = cv2.bitwise_and(img,mask)

show2img(mask,loc)

制作体会:

  1. 代码简洁,学习者不容易晕。
  2. 解释通俗易懂,学习者容易理解。
  3. 需要原库函数代码,请大家留言。

你可能感兴趣的:(opencv,计算机视觉,人工智能)