蒙板扣图的学习目标:
图像素材:
本操作适用图片:
-前景清晰,背景模糊的原始图片
自定义库:
把OPENCV中的干扰理解的部分,制作成独立的库文件,这样学友们就可以轻松的理解蒙板扣图的真正含义。
自定义的方法名称:
- show2img:可以同时显示两种图片img,mask的类方法。
- imrd() 方法可以获取原图
- contourShape.findContours()通过寻找轮廓方法获取三个返回值
蒙板扣图原理:
掩模图像M中只有两种值:一种是数值0,另外一种是数值255。
255
- 得到的轮廓白色轮廓图:
轮廓中白色部分:255r的值,对应到img原图位置的所有像素点都会显示,如图:
完整代码:
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)
制作体会:
- 代码简洁,学习者不容易晕。
- 解释通俗易懂,学习者容易理解。
- 需要原库函数代码,请大家留言。