《Opencv》基础操作详解(2)

接上篇:《Opencv》基础操作详解(1)-CSDN博客

目录

Opencv基础操作

11、B、G、R颜色通道提取

12、显示单个通道颜色

[13、 合并颜色通道](#13、 合并颜色通道)

14、图像添加马赛克

15、图片区域替换

16、图片的缩放(常用)

17、图像运算

(1)、+运算

(2)、add运算

(3)、图像加权运算


Opencv基础操作

11、B、G、R颜色通道提取

注意:我们这里是显示单个通道的图像,但是所显示的图片确实灰色的,那是因为只显示单个通道时, 实际上是将单个通道作为亮度值,而将其他通道设置为默认的最大值,也就是255。这会导致图像呈现为灰色。 想要展示只包含单个通道信息的彩色图像,可以将图像中的其他通道设为0。

python 复制代码
import cv2
# 1. 读取图像
a = cv2.imread(r'./images/img.png')
# 2. 提取颜色通道
a1 = a[:, :, 0]  # 蓝色通道(B通道)
a2 = a[:, :, 1]  # 绿色通道(G通道)
a3 = a[:, :, 2]  # 红色通道(R通道)
# 或者使用 cv2.split() 来分离颜色通道
b, g, r = cv2.split(a)
# b 包含蓝色通道
# g 包含绿色通道
# r 包含红色通道
cv2.imshow('result', a2)
# 4. 设置窗口显示时间,单位为毫秒(这里设置为100秒,可以根据需要调整)
cv2.waitKey(0)
# 5. 关闭所有窗口
cv2.destroyAllWindows()

12、显示单个通道颜色

python 复制代码
import cv2
a = cv2.imread(r'./images/img.png')
# 复制原始图像以避免更改原始图像
a_new = a.copy()
a_new[:, :, 1] = 0  # 绿色通道设为0
a_new[:, :, 2] = 0  # 红色通道设为0
# 创建一个窗口来显示修改后的图像,并将其命名为'result'
cv2.imshow('result', a_new)
cv2.waitKey(0)
cv2.destroyAllWindows()

如果只将一个通道设为0,保留其他两个保留会有不同效果哦。自己尝试一下把!!

13、 合并颜色通道

python 复制代码
import cv2
# 1. 读取图像
a = cv2.imread(r'./images/img.png')
# 2. 提取颜色通道
a1 = a[:, :, 0]  # 蓝色通道(B通道)
a2 = a[:, :, 1]  # 绿色通道(G通道)
a3 = a[:, :, 2]  # 红色通道(R通道)
# 或者使用 cv2.split() 来分离颜色通道
b, g, r = cv2.split(a)
# b 包含蓝色通道  g 包含绿色通道  r 包含红色通道
# 使用cv2.merge()函数将三个通道重新合并成一个图像
img = cv2.merge((b, g, r))
# img = cv2.merge((a1,a2,a3)) 或者使用这行代码
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:需要将三个通道放在一个小括号中在传入cv2.merge(),且要保证三个通道数组的形状大小相同。

14、图像添加马赛克

原理:选中图片的一部分将区域,将数组中的数值随机打乱达到马赛克效果

python 复制代码
import numpy as np
img = cv2.imread('./images/img.png')
img[100:200,100:200] = np.random.randint(0,256,(100,100,3)) # 0,256 代表取值范围,左闭右开。()内代表数组大小
cv2.imshow('',img)
cv2.waitKey(0)

15、图片区域替换

选中两张图片中大小相同的区域,将其中一个区域的数组赋值给另外一个图片相同的区域,就达到了图片区域替换的效果。

python 复制代码
img1 = cv2.imread('./images/img.png')
img2 = cv2.imread('./images/img_1.png')
# 两边数组的大小必须相同
img1[100:200,100:200] = img2[100:200,100:200]
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey(0)

16、图片的缩放(常用)

图片缩放cv2.resize(src,dsize,fx,fy) 用于调整图像的大小。它有以下几个参数:

src:要调整大小的输入图像,可以是numpy数组、PIL图像或其他类型。

dsize:输出图像的大小,可以是一个元组,例如(宽,高),或者使用整数标量来缩放原始图像。如果dsize为None,则根据scalefx和scalefy缩放原始图像。

fx:沿x轴的缩放系数。

fy:沿y轴的缩放系数。

python 复制代码
img3 = cv2.imread('./images/cat.jpg')
# 方法一
img4 = cv2.resize(img3,(400,400))
# 方法二,fx,fy代表x轴和y轴的缩放比例
img5 = cv2.resize(img3,dsize=None,fx=1.5,fy=2)
# 原图
cv2.imshow('yutu',img3)
# dsize方法缩放的图
cv2.imshow('dsize',img4)
# fx、fy方法缩放的图
cv2.imshow('exif',img5)
cv2.waitKey(0)
cv2.destroyAllWindows()

17、图像运算

(1)、+运算

对于+号运算,当对图像a,图像b进行加法求和时,遵循以下规则:

  • 当某位置像素相加得到的数值小于255时,该位置数值为两图像该位置像素相加之和
  • 当某位置像素相加得到的数值大于255时,该位置数值将截断结果并将其减去 256 例如:相加后是260,实际是260-256= 4
python 复制代码
img1 = cv2.imread('./images/img.png')
img2 = cv2.imread('./images/cat.jpg')

# +运算,超过255会减去256
img_jia = img1 + 50
cv2.imshow('yuantu',img1)
cv2.imshow('jia',img_jia)
cv2.waitKey(0)

不仅可以直接加数值还可以两个大小相同的区域相加

python 复制代码
img1 = cv2.imread('./images/img.png')
img2 = cv2.imread('./images/cat.jpg')
# 区域加法
img_jia2 = img1[0:200,0:200]+img2[0:200,0:200]
cv2.imshow('jia2',img_jia2)
cv2.waitKey(0)
(2)、add运算

对于cv2.add()运算,当对图像a,图像b进行加法求和时,遵循以下规则:

  • 当某位置像素相加得到的数值小于255时,该位置数值为两图像该位置像素相加之和
  • 当某位置像素相加得到的数值大于255时,该位置数值为255
python 复制代码
img1 = cv2.imread('./images/img.png')
img2 = cv2.imread('./images/cat.jpg')

# 两图相加add,超过255的会以255作为数值
img1 = cv2.resize(img1,(400,400))
img2 = cv2.resize(img2,(400,400))
img_add = cv2.add(img1,img2)
cv2.imshow('add',img_add)
cv2.waitKey(0)
(3)、图像加权运算

cv2.addWeighted(src1, α, src2, β, γ)

就是在计算两幅图像的像素值之和时,将每幅图像的权重考虑进来,可以用公式表示为dst=src1×α+src2×β+γ

src1、src2:输入的图像

α、β:权重

γ:图像的亮度值(常数),将添加到加权和上

注意:在执行add操作时要保证输入的两张图大小相同

python 复制代码
img1 = cv2.imread('./images/img.png')
img2 = cv2.imread('./images/cat.jpg')

img1 = cv2.resize(img1,(400,400))
img2 = cv2.resize(img2,(400,400))
img_add_weight = cv2.addWeighted(img1,0.8,img2,0.2,0)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('weight',img_add_weight)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
Aileen_0v028 分钟前
【玩转OCR | 腾讯云智能结构化OCR在图像增强与发票识别中的应用实践】
android·java·人工智能·云计算·ocr·腾讯云·玩转腾讯云ocr
阿正的梦工坊1 小时前
深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
人工智能·pytorch·python
Ainnle1 小时前
GPT-O3:简单介绍
人工智能
OceanBase数据库官方博客2 小时前
向量检索+大语言模型,免费搭建基于专属知识库的 RAG 智能助手
人工智能·oceanbase·分布式数据库·向量数据库·rag
测试者家园2 小时前
ChatGPT助力数据可视化与数据分析效率的提升(一)
软件测试·人工智能·信息可视化·chatgpt·数据挖掘·数据分析·用chatgpt做软件测试
西猫雷婶2 小时前
python学opencv|读取图像(十九)使用cv2.rectangle()绘制矩形
开发语言·python·opencv
Loving_enjoy3 小时前
ChatGPT详解
人工智能·自然语言处理
人类群星闪耀时4 小时前
深度学习在灾难恢复中的作用:智能运维的新时代
运维·人工智能·深度学习
图王大胜4 小时前
模型 确认偏误(关键决策)
人工智能·职业发展·管理·心理·认知·决策