什么是掩模???
下面我们来创建一个掩模图像 !
示例代码:
import cv2
import numpy as np
# 使用zeros()方法创建宽150、高150、3通道,像素类型为无符号8位数字的零值图像
mask = np.zeros((150, 150, 3), np.uint8)
mask[50:90, 20:90, :] = 255; # 50~100行、20~80列的像素改为纯白像素
cv2.imshow("mask1", mask) # 展示掩模
mask[:, :, :] = 255; # 全部改为纯白像素
mask[50:100, 20:80, :] = 0; # 50~100行、20~80列的像素改为纯黑像素
cv2.imshow("mask2", mask) # 展示掩模
cv2.waitKey()
cv2.destroyAllWindows()
效果图像如下:
示例代码:
import cv2
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures(3).jpg")
sum1 = img + img # 使用运算符相加
cv2.imshow("img", img) # 展示原图
cv2.imshow("sum1", sum1) # 展示运算符相加结果
cv2.waitKey()
cv2.destroyAllWindows()
结果图像:
示例代码:
import cv2
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures(3).jpg")
sum2 = cv2.add(img, img) # 使用方法相加
cv2.imshow("img", img) # 展示原图
cv2.imshow("sum2", sum2) # 展示方法相加结果
cv2.waitKey()
cv2.destroyAllWindows()
结果图像:
示例代码:
import cv2
import numpy as np
img1 = np.zeros((150, 150, 3), np.uint8) # 创建150*150的0值图像
img1[:, :, 0] = 255 # 蓝色通道賦予最大值,创建纯蓝图像
img2 = np.zeros((150, 150, 3), np.uint8)
img2[:, :, 1] = 255 # 绿色通道賦予最大值,创建纯绿图像
img3 = np.zeros((150, 150, 3), np.uint8)
img3[:, :, 2] = 255 # 红色通道賦予最大值,创建纯红图像
cv2.imshow("1", img1) # 展示蓝色图像
cv2.imshow("2", img2) # 展示绿色图像
cv2.imshow("3", img3) # 展示红色图像
img = cv2.add(img1, img2) # 蓝色 + 绿色 = 青色
cv2.imshow("1+2", img) # 展示蓝色加绿色的结果
img = cv2.add(img, img3) # 红色 + 青色 = 白色
cv2.imshow("1+2+3", img) # 展示三色图像相加的结果
cv2.waitKey()
cv2.destroyAllWindows()
结果图像如下:
示例代码:
import cv2
import numpy as np
img1 = np.zeros((250, 250, 3), np.uint8) # 创建250*250的0值图像
img1[:, :, 0] = 255 # 蓝色通道賦予最大值,创建纯蓝图像
img2 = np.zeros((250, 250, 3), np.uint8)
img2[:, :, 2] = 255 # 红色通道賦予最大值,创建纯红图像
img = cv2.add(img1, img2) # 蓝色 + 红色 = 洋红色
cv2.imshow("no mask", img) # 展示相加的结果
m = np.zeros((250, 250, 1), np.uint8) # 创建掩模
m[50:200, 50:200, :] = 255 # 掩模中央位置为纯白色
cv2.imshow("mask", m) # 展示掩模
img = cv2.add(img1, img2, mask=m) # 相加时使用掩模
cv2.imshow("use mask", img) # 展示相加的结果
cv2.waitKey()
cv2.destroyAllWindows()
结果图像:
示例代码:
import cv2
import numpy as np
flower = cv2.imread(r"B:\Python_opencv_book\amygdalus triloba.png")
mask = np.zeros(flower.shape, np.uint8) # 与花图像大小相等的掩模图像
mask[120:180, :, :] = 255 # 横着的白色区域
mask[:, 80:180, :] = 255 # 竖着的白色区域
img = cv2.bitwise_and(flower, mask) # 与运算
cv2.imshow("flower", flower) # 展示花图像
cv2.imshow("mask", mask) # 展示掩模图像
cv2.imshow("img", img) # 展示与运算结果
cv2.waitKey()
cv2.destroyAllWindows()
结果图像:
示例代码如下:
import cv2
import numpy as np
flower = cv2.imread(r"B:\Python_opencv_book\amygdalus triloba.png")
mask = np.zeros(flower.shape, np.uint8) # 与花图像大小相等的掩模图像
mask[120:180, :, :] = 255 # 横着的白色区域
mask[:, 80:180, :] = 255 # 竖着的白色区域
img = cv2.bitwise_or(flower, mask) # 或运算
cv2.imshow("flower", flower) # 展示花图像
cv2.imshow("mask", mask) # 展示掩模图像
cv2.imshow("img", img) # 展示或运算结果
cv2.waitKey()
cv2.destroyAllWindows()
结果图像如下:
示例代码如下:
import cv2
img1 = cv2.imread(r"C:\Users\cgs\Desktop\pictures(3).jpg")
img2 = cv2.bitwise_not(img1) # 取反运算
cv2.imshow("img1", img1) # 展示花图像
cv2.imshow("img2", img2) # 展示取反运算结果
cv2.waitKey()
cv2.destroyAllWindows()
运行结果如下:
可以看到,图像经过取反运算后会呈现与原图完全相反的颜色效果!!!
某像素与纯白色像素进行异或运算, 结果为原像素的取反结果
某像素与纯黑色像素进行异或运算, 结果仍是该像素的原值
示例代码如下:
import cv2
import numpy as np
img1 = cv2.imread(r"C:\Users\cgs\Desktop\pictures(3).jpg")
m = np.zeros(img1.shape, np.uint8) # 与花图像大小相等的0值图像
m[120:180, :, :] = 255 # 横着的白色区域
m[:, 80:180, :] = 255 # 竖着的白色区域
img = cv2.bitwise_xor(img1, m) # 两幅图像做异或运算
cv2.imshow("img1", img1) # 展示花图像
cv2.imshow("mask", m) # 零值图像
cv2.imshow("img", img) # 异或运算结果
cv2.waitKey()
cv2.destroyAllWindows()
操作结果图像如下:
示例代码如下:
import cv2
import numpy as np
def encode(img, img_key): # 加密、解密方法
result = img = cv2.bitwise_xor(img, img_key) # 两图像做异或运算
return result
flower = cv2.imread(r"C:\Users\cgs\Desktop\pictures(3).jpg") # 花原始图像
rows, colmns, channel = flower.shape # 原图像的行数、列数和通道数
# 创建与花图像大小相等的随机像素图像,作为密钥图像
img_key = np.random.randint(0, 256, (rows, colmns, 3), np.uint8)
cv2.imshow("1", flower) # 展示花图像
cv2.imshow("2", img_key) # 展示秘钥图像
result = encode(flower, img_key) # 对花图像进行加密
cv2.imshow("3", result) # 加密图像
result = encode(result, img_key) # 对花图像进行解密
cv2.imshow("4", result) # 解密图像
cv2.waitKey()
cv2.destroyAllWindows()
操作结果图像如下:
示例代码如下:
import cv2
img1 = cv2.imread(r"C:\Users\cgs\Desktop\pictures(2).jpg") # 原始图像1
img2 = cv2.imread(r"C:\Users\cgs\Desktop\pictures(1).jpg") # 原始图像2
rows, colmns, channel = img1.shape # img1的行数、列数和通道数
img2 = cv2.resize(img2, (colmns, rows)) # img2缩放成日落图像大小
img3 = cv2.addWeighted(img1, 0.6, img2, 0.6, 0) # 计算两幅图像加权和
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)
cv2.imshow("addWeighted", img3) # 展示加权和图像
cv2.waitKey()
cv2.destroyAllWindows()
操作结果图像如下:
示例代码如下:
import cv2
beach_img = cv2.imread(r"B:\Python_opencv_book\beach.jpg") # 沙滩原始图像
cat_img = cv2.imread(r"B:\Python_opencv_book\cat.jpg") # 小猫原始图像
cat = cat_img[75:400, 120:260, :] # 截取75行至400行、120列至260列的像素值所组成的图像
cat = cv2.resize(cat, (70, 160)) # 将截取出的图像缩放成70*160大小
cv2.imshow("cat", cat_img) # 展示小猫原始图像
cv2.imshow("cat2", cat) # 展示截取并缩放的小猫图像
cv2.imshow("beach", beach_img) # 展示沙滩原始图像
rows, colmns, channel = cat.shape # 记录截取图像的行数和列数
# 将沙滩中一部分像素改成截取之后的图像
beach_img[100:100 + rows, 260:260 + colmns, :] = cat
cv2.imshow("beach2", beach_img) # 展示修改之后的图像
cv2.waitKey()
cv2.destroyAllWindows() #
操作结果图像如下:
那么本章内容就到此结束了!!!