当前位置: 首页 > article >正文

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

接上篇:《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.kler.cn/a/453788.html

相关文章:

  • 【电商搜索】文档的信息论生成聚类
  • CSS系列(33)-- Perspective详解
  • 搜索模拟版!!!(自创)
  • C/C++ 数据结构与算法【树和二叉树】 树和二叉树,二叉树先中后序遍历详细解析【日常学习,考研必备】带图+详细代码
  • 电压控制环与电流控制环
  • 数学建模与数学建模竞赛
  • WPF+MVVM案例实战与特效(四十七)-实现一个路径绘图的自定义按钮控件
  • FD(File Descriptor)泄漏
  • 虚幻引擎结构之TArray
  • niushop开源商城靶场漏洞
  • 高校网络安全存在的问题与对策研究
  • PCB注意事项
  • mac 关闭 sip
  • new_event_loop k8s 不显示log
  • 真实环境下实车运行,新能源汽车锂离子电池数据集
  • 同源策略详解
  • windows安装vmware
  • Flink 集群有哪些⻆⾊?各⾃有什么作⽤?
  • 【MySQL】MySQL表的约束
  • Spring Security3.0.2.1版本