Python OpenCV从入门到精通——第九章——图像的运算

import cv2
import numpy as np

#           ——————————————————————————掩模
# 掩模是一副图像(图像中只有黑色和白色),将掩模覆盖原始图像即可实现仅暴露出感兴趣区域
#与掩模进行与、add运算,显示掩模的白色区域对应的图像
#与掩模进行或、add运算,显示掩模的黑色区域对应的图像
# 创建宽150、高150、3通道,像素类型为无符号8位数字的零值(即纯黑)图像
img = cv2.imread("beach.jpg")
img1 = np.zeros((150, 150, 3), np.uint8)                # 创建150*150,像素类型为无符号8位数字的零值(即纯黑)图像
img1[:, :, 0] = 255                                     # 图像1,蓝色通道賦予最大值
img2 = np.zeros((150, 150, 3), np.uint8)
img2[:, :, 2] = 255                                     # 图像2,红色通道賦予最大值
img = cv2.add(img1, img2)                               # 蓝色 + 红色 = 洋红色
cv2.imshow("no mask", img)
m = np.zeros((150, 150, 1), np.uint8)                   # 创建掩模
m[50:100, 50:100, :] = 255                              # 掩模中央位置为纯白色
cv2.imshow("mask", m)
img = cv2.add(img1, img2, mask=m)                       # 相加时使用掩模(仅显示掩模白色部分对应的图像)
cv2.imshow("use mask", img)

cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体



#           ——————————————————————————图像的加法运算(相同位置像素值相加)
#   dst = cv2.add(src1,src2,mask,dtype) 参数依次为:第一幅图像,第二幅图像,掩模(可选参数),图像深度(可选参数)
img = cv2.imread("beach.jpg")
sum1 = img + img                                        # 使用运算符相加    超出255取模
sum2 = cv2.add(img, img)                                # 使用方法相加     超出255取255
cv2.imshow("img", img)
cv2.imshow("sum1", sum1)
cv2.imshow("sum2", sum2)
cv2.waitKey()
cv2.destroyAllWindows()



#           ——————————————————————————图像的位运算(像素为10进制可转换为2进制可做位运算)
#           ——————————与运算(与纯白做与仍为原图像与纯黑做与为黑)与掩模进行与运算,显示掩模的白色区域对应的图像
#   dst = cv2,bitwise_and(src1,src2,mask)   参数依次为:第一幅图像、第二幅图像、掩模(可选参数)
flower = cv2.imread("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()
#           ——————————或运算(与纯白做或为黑,与纯黑做或仍为原图像)与掩模进行与运算,显示掩模的黑色区域对应的图像
#   dst = cv2,bitwise_or(src1,src2,mask)   参数依次为:第一幅图像、第二幅图像、掩模(可选参数)
img = cv2.bitwise_or(flower, mask)                          # 或运算
cv2.imshow("flower", flower)
cv2.imshow("mask", mask)
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()
#           ——————————取反运算(1变为0,0变为1)与原图颜色相反的效果
#   dst = cv2,bitwise_not(src,mask)   参数依次为:图像,掩模(可选参数)
img = cv2.bitwise_not(flower)                               # 取反运算
cv2.imshow("flower", flower)
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()
#           ——————————异或运算(掩模黑色区域内容不变,掩模白色区域内容取反)
#   dst = cv2,bitwise_xor(src,mask)   参数依次为:图像,掩模(可选参数)
img = cv2.bitwise_xor(flower, mask)                         # 两张图像做异或运算
cv2.imshow("flower", flower)
cv2.imshow("mask", m)
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()



#           ——————————————————————————合并图像
#           ——————————加权和(两幅图像融合到一起)
#   dst = cv2.addWeighgted(src1,alpha,src2,beta,gamma)  参数依次是:第一幅图像,第一幅图像的权重,第二幅图像,第二幅图像的权重、结果图像上添加的标量(值越大越亮)
sun = cv2.imread("sunset.jpg")
beach = cv2.imread("beach.jpg")
rows, colmns, channel = sun.shape                           # 日落图像的行数、列数和通道数
beach = cv2.resize(beach, (colmns, rows))                   # 沙滩图像缩放成日落图像大小
img = cv2.addWeighted(sun, 0.6, beach, 0.6, 0)              # 计算两幅图像加权和
cv2.imshow("sun", sun)
cv2.imshow("beach", beach)
cv2.imshow("addWeighted", img)
cv2.waitKey()
cv2.destroyAllWindows()
#           ——————————覆盖(每幅图像提供一部分内容,将这些内容拼接成一幅图像)
#   修改图像像素值的方法实现图像的覆盖
beach_img = cv2.imread("beach.jpg")
cat_img = cv2.imread("cat.jpg")
cat = cat_img[75:400, 120:260, :]                           # 截取75行至400行、120列至260列的像素值所组成的图像
cat = cv2.resize(cat, (70, 160))                            # 将截取出的图像缩放成70*160大小
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()



amygdalus triloba.png
在这里插入图片描述
beach.png
在这里插入图片描述
cat.jpg
在这里插入图片描述
sunset.jpg
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值