概述
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从入门到精通——第九章——图像的运算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复