在图像处理过程中,我们可能对图像的某个特定区域感兴趣,该区域被称为感兴趣区域(Region of Interest,ROI)。在设定ROI后,可以对该区域进行整体操作
如图所示,如果我们想取下图中黑色区域块,我们可以表示为代码
img[25:50,25:50]
我们可以将黑色快复制到另一块区域
a = img[25:50,25:50]
img[25:50,-50:-25] = a
于是我们得到了这样一张图
同时我们也可以截取人像脸部的位置:
face = img[22:158,95:170]
得到图像
掩模
掩模在图像处理中被广泛应用,可以完成如下功能:
1、ROI的提取:使用掩模与原始图像进行计算,可以提取掩模指定的特定区域,将其余区域设置为白色或者黑色。
2、屏蔽作用:仅让掩模指定的区域参与运算。
3、结构特征提取:用图像匹配方法检测和提取图像中与掩模相似的结构特征。
像这样一张图的生成,让我们看一下它的代码
cv2.imshow('img',img)
h,w,c = img.shape
mask = np.zeros((h,w,c),dtype=np.uint8)
mask[22:300,43:95] = 1
mask[22:158,95:170] = 1
cv2.imshow('mask',mask*255)
masked_img = img*mask
cv2.imshow('masked_img',masked_img)
cv2.waitKey()
cv2.destroyAllWindows()
首先我们通过np.zeros函数创造出一个和原图同尺寸的全黑图层,然后取出相应透明区域,将0改为1
之后再通过掩模与原图相乘,则黑色部分为0*任何数,结果为0。而透明区域为1*任何数,结果为1,也就是原始像素点。因而得出MaskedFace
逻辑运算
根据按位与运算的规则,任意数值与数值1进行与运算,结果都等于其自身的值。因此,任意一个8位像素值与二进制数1111 1111进行按位与运算,得到的都是像素值自身。二进制数111 111对应的十进制数是255,所以任意一个8位像素值与255进行按位与运算得到的都是原来的像素值,例如,如果像素点A的值为58,像素点B的值为135,将这两个像素值与255进行按位与运算后,得到的是它们自身的值
说明 | 像素点A | 像素点B |
像素点对应的二进制数 | 0011 1010 | 1000 0111 |
255的二进制形式 | 1111 1111 | 1111 1111 |
按位与运算的结果 | 0011 1010 | 1000 0111 |
十进制数 | 58 | 135 |
是否相等 | 相等 | 相等 |
当然,如果与0 (黑色) 进行按位与运算,则结果都是0 (黑色)
代码如下:
import numpy as np
import cv2
img = cv2.imread('D:/PixC/01.jpeg')
h,w,c = img.shape
mask = np.zeros((h,w,c),dtype=np.uint8)
mask[22:300,43:95] = 255
mask[22:158,95:170] = 255
masked_img = cv2.bitwise_and(img,mask)
cv2.imshow('img',img)
cv2.imshow('mask',mask)
cv2.imshow('masked_img',masked_img)
cv2.waitKey()
cv2.destroyAllWindows()
得到如下图
本文含有隐藏内容,请 开通VIP 后查看