第三章-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()
显示如下:
注意:
- 图像的shape属性是一个包含图片长、宽、通道数的元祖
- 生成的掩模和图像大小必须完全一致
逻辑运算
逻辑运算的基础是任何数与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()
运行结果:
注意:
- 掩模作为函数参数实现时,只要数组位置的值为0,则这些位置都置为0
- 其他不为0的位置的数值,只要不为0即可
更多推荐
已为社区贡献1条内容
所有评论(0)