我是靠谱客的博主 粗心雪糕,最近开发中收集的这篇文章主要介绍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
在这里插入图片描述

最后

以上就是粗心雪糕为你收集整理的Python OpenCV从入门到精通——第九章——图像的运算的全部内容,希望文章能够帮你解决Python OpenCV从入门到精通——第九章——图像的运算所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部