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

news/2024/12/24 9:37:26 标签: opencv, 人工智能, 计算机视觉

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

目录

Opencv基础操作

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

12、显示单个通道颜色

13、 合并颜色通道

 14、图像添加马赛克

15、图片区域替换

16、图片的缩放(常用)

17、图像运算

(1)、+运算

(2)、add运算

(3)、图像加权运算


Opencv基础操作

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

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

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、显示单个通道颜色

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、 合并颜色通道

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、图像添加马赛克

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

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、图片区域替换

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

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轴的缩放系数。

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
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)

 

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

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
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操作时要保证输入的两张图大小相同

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()

 


http://www.niftyadmin.cn/n/5797665.html

相关文章

AR眼镜制备的步骤与关键技术

AR(增强现实)眼镜的制备涉及多个步骤和关键技术,涵盖硬件设计、软件开发以及系统集成。以下是详细的步骤和关键技术: 1. 硬件设计与制造 1.1 光学显示系统 关键技术: 波导技术:如光栅波导、全息波导、衍射…

云原生相关的 Go 语言工程师技术路线(含博客网址导航)

要成为一名云原生相关的 Go 语言工程师,需要在 Go 语言、云原生技术栈以及相关的开发和运维工具上建立扎实的基础。下面是一个前字节员工总结的技术路线规划: 1. 掌握 Go 语言基础 深入理解 Go 语言:你需要熟练掌握 Go 的语法、数据结构、并…

前端开发 之 12个鼠标交互特效下【附完整源码】

前端开发 之 12个鼠标交互特效下【附完整源码】 文章目录 前端开发 之 12个鼠标交互特效下【附完整源码】七:粒子烟花绽放特效1.效果展示2.HTML完整代码 八:彩球释放特效1.效果展示2.HTML完整代码 九:雨滴掉落特效1.效果展示2.HTML完整代码 十…

μC/OS-Ⅱ源码学习(8)---同步与延时

快速回顾 μC/OS-Ⅱ中的多任务 μC/OS-Ⅱ源码学习(1)---多任务系统的实现 μC/OS-Ⅱ源码学习(2)---多任务系统的实现(下) μC/OS-Ⅱ源码学习(3)---事件模型 μC/OS-Ⅱ源码学习(4)---信号量 μC/OS-Ⅱ源码学习(5)---消息队列 μC/OS-Ⅱ源码学习(6)---事件标志组 μC/OS-…

动手学深度学习-深度学习计算-1层和块

目录 自定义块 顺序块 在前向传播函数中执行代码 效率 小结 之前首次介绍神经网络时,我们关注的是具有单一输出的线性模型。 在这里,整个模型只有一个输出。 注意,单个神经网络 (1)接受一些输入; &am…

[Router]路由器常用的后台判断网络ping 可靠公共 IP 地址整理

接受ICMP公共DNS地址 接受 ICMP 的公有 IPv4 和 IPv6 端点的集合,如果使用 ping 方法,则可以使用来跟踪接口的连接状态。这些是具有高可用性的,通常可以可靠地用作确认网络连接的终端节点。或者,您也可以使用 ISP 的 DNS 解析器&a…

关于 K8s 的一些基础概念整理-补充【k8s系列之二】

〇、前言 本文继续整理下 K8s 的一些基础概念,作为前一篇概念汇总的补充。 前一篇博文链接:关于 K8s 的一些基础概念整理【k8s系列之一】_集群 master节点 控制节点 宿主机-CSDN博客 一、详情 1.1 Label Label 在 k8s 中是一个非常核心的概念&#xf…

【新教程】Ubuntu server 24.04配置无线网WiFi

0 相关信息 Ubuntu Server 24.04 1 工具准备 sudo apt install network-manager wpasupplicant wireless-tools2 过程 查看无线网卡名称: ip addr一般wl开头的为无线网卡。比如,我这里的无线网卡就是wlo1 扫描无线网络: sudo iwlist wl…