第三章-OpenCV基础-4-掩模

基本概念

掩模,又称为掩膜,掩码,模板。图像掩模是指,用特定的图像/图形/物体遮挡代处理的图像(全部或局部),从而控制图像处理的区域,在数字图像处理中,掩模就是一个指定的数组,毕竟,图像也是数组。

左边图为原图,中间图为掩模(白色区域为透明区域,黑色区域为黑色遮挡区域),经过控制处理后,得到右边的结果图。

乘法运算

乘法运算的基础是任何数与0相乘为0,任何数和1相乘为其本身

简单实操如下:

import cv2 as cv
import numpy as np

lena = cv.imread("lena.jpg")
shape = lena.shape
cv.imshow("lena", lena)
# 生成掩模区域
yanmo = np.zeros([shape[0], shape[1], shape[2]], np.uint8)
# 生成掩模实际作用区域
yanmo[100:300, 200:400] = 1
# 掩模乘法操作
new_lena = lena * yanmo
cv.imshow("new_lena", new_lena)

cv.waitKey()
cv.destroyAllWindows()

显示如下:

 

注意:

  1. 图像的shape属性是一个包含图片长、宽、通道数的元祖
  2. 生成的掩模和图像大小必须完全一致

逻辑运算

逻辑运算的基础是任何数与0进行按位与运算结果为0,任何数与1进行按位与运算为其本身,8位像素值的全1值为255。

因此如上代码可以改为:

import cv2 as cv
import numpy as np

lena = cv.imread("lena.jpg")
shape = lena.shape
print(type(shape))
cv.imshow("lena", lena)
# 生成掩模区域
yanmo = np.zeros([shape[0], shape[1], shape[2]], np.uint8)
# 生成掩模实际作用区域,全部为255
yanmo[100:300, 200:400] = 255
# 掩模按位与操作
new_lena = cv.bitwise_and(lena, yanmo)
cv.imshow("new_lena", new_lena)

cv.waitKey()
cv.destroyAllWindows()

效果如上图一样。

掩模作为函数参数

我们知道,掩模本质是一个特定的数组,掩模在函数中作为参数存在。

举例说明: 计算结果 = cv2.add( 参数1 , 参数2 ,掩模 )

当使用掩模参数时,操作只会在掩模数组中值为非空的像素点上执行,并将其他像素点的像素值置为0

具体使用如下代码:

import cv2 as cv
import numpy as np

lena = cv.imread("lena.jpg")
# 随便截的一张图,大小和lena的一样 512*512
test = cv.imread("test.png")
h, w, c = lena.shape
cv.imshow("lena", lena)
cv.imshow("test", test)
# 生成掩模区域
yanmo = np.zeros([h,w], np.uint8)
# 生成掩模实际作用区域,全部为非0即可,这里随便选了100
yanmo[0:400, 100:400] = 100
# 掩模作为函数参数使用
new_lena = cv.add(lena, test, mask=yanmo)
cv.imshow("mask", new_lena)

cv.waitKey()
cv.destroyAllWindows()

运行结果:

 

注意:

  1. 掩模作为函数参数实现时,只要数组位置的值为0,则这些位置都置为0
  2. 其他不为0的位置的数值,只要不为0即可

 

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_Sun_01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值