《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()
相关推荐
用户600071819108 小时前
【翻译】构建 Claude Code 的经验:我们如何使用 Skills
人工智能
没事别瞎琢磨8 小时前
五、进程执行——spawn、超时与进程树清理
人工智能·node.js
没事别瞎琢磨8 小时前
四、命令风险分级与审批策略
人工智能·node.js
阿乔外贸日记8 小时前
埃塞俄比亚出口全流程注意事项
大数据·人工智能·智能手机·云计算·汽车
程序员cxuan8 小时前
Agents.md 是什么
人工智能·后端·程序员
人工小情绪8 小时前
Windows 安装 Codex 桌面版,并用 CC Switch 管理配置
人工智能·windows·codex·cc switch
godspeed_lucip8 小时前
LLM和Agent——专题6:Multi Agent 入门(5)
人工智能·python
网安情报局8 小时前
告别排队与高延迟:直连GPT全系列,解锁低门槛、高稳定的AI生产力
人工智能·gpt·api·ai大模型
Hali_Botebie8 小时前
非共轭先验(Non-conjugate Prior)和共轭先验(Conjugate Prior)
人工智能·机器学习
没事别瞎琢磨8 小时前
三、配置系统——默认值与解析
人工智能·node.js