cv2读取np的矩阵图片,numpy数组clip和astype,查看数据类型array.dtype

clip(a, a_min, a_max, out=None)

功能,将数组中的数据在(a_min, a_max)范围之外的数据切割在,这个范围直接,小于a_min的值修改为a_min ,大于 a_max修改为 a_max,其他值不变

import numpy as np

a= np.array([[[-1,3,5],[3,4,5]],[[1,3,5],[3,4,5]]])
b=np.array([[[1,3,5],[1,1,1]],[[1,3,5],[1,1,1]]])
c = a+b
print(c.shape)
c = np.clip(a,0,3)
print(c.shape)
print(c)

在这里插入图片描述

array.astype(np.uint8)将数组中的数据类型修改

参考:https://blog.csdn.net/sunmingyang1987/article/details/111591712
可以先用clip将数据放在一定的范围内,然后再用astype修改数据类型

import numpy as np

a= np.array([[[-1,3,5],[3,4,5]],[[1,3,5],[3,4,5]]])
print(a.astype(np.uint8))

在这里插入图片描述

查看array中的数据类型.dtype

使用cv2读取噪声图片

import numpy as np
import cv2

img = cv2.imread('test_img/0.jpg')
cv2.imshow('img',img)
noise = np.random.randint(0,100,(img.shape[0],img.shape[1],3),dtype=np.uint8)
cv2.imshow('noise',noise)
img_noise = np.clip(img+noise,0,255).astype(np.uint8)
cv2.imshow('img_noise',img_noise)
cv2.waitKey(0)

原图
在这里插入图片描述

噪声图片
在这里插入图片描述

合并
在这里插入图片描述

### 关于 OpenCV 中 RGB 颜色矫正的方法 在 OpenCV 中,RGB 颜色矫正是通过调整图像的颜色通道实现的。通常情况下,这种操作可以通过矩阵运算完成,比如应用色彩校正矩阵 (Color Correction Matrix, CCM) 或者伽马校正等方式。 #### 色彩校正方法概述 色彩校正可以分为线性非线性两种方式。在线性校正中,最常见的是使用色彩校正矩阵 (CCM),它能够将输入颜色转换为目标颜色空间。而非线性校正则可能涉及伽马校正或自定义曲线映射等技术[^1]。 以下是基于 OpenCV 实现 RGB 颜色矫正的具体方法: --- #### 使用色彩校正矩阵 (CCM) 色彩校正矩阵是一种常见的线性变换工具,用于将一种设备的颜色表示形式转换为另一种设备的颜色表示形式。假设我们有一个 3×3 的 CCM 矩阵 `ccm` 一张 BGR 图像,则可以通过以下步骤实现颜色矫正: ```python import numpy as np import cv2 # 定义色彩校正矩阵 (示例) ccm = np.array([ [0.987, -0.045, 0.032], [-0.012, 1.023, -0.011], [0.003, -0.015, 0.992] ], dtype=np.float32) # 加载原始图像(BGR 格式) image_bgr = cv2.imread('input_image.jpg') # 将图像从 uint8 转换为 float32 并归一化到范围 [0, 1] image_float = image_bgr.astype(np.float32) / 255.0 # 应用色彩校正矩阵 corrected_image = cv2.transform(image_float, ccm) # 反归一化并转换回 uint8 corrected_image_uint8 = (np.clip(corrected_image, 0, 1) * 255).astype(np.uint8) # 显示结果 cv2.imshow('Original Image', image_bgr) cv2.imshow('Corrected Image', corrected_image_uint8) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码实现了以下功能: 1. **加载图像**:使用 `cv2.imread()` 函数加载图像,并注意默认是以 BGR 格式存储。 2. **浮点数转换与归一化**:为了提高精度,先将图像数据类型从 `uint8` 转换为 `float32`,并将像素值缩放到 `[0, 1]` 范围。 3. **应用 CCM**:调用 `cv2.transform()` 对图像进行线性变换。 4. **反归一化与显示**:最后将修正后的图像重新缩放至 `[0, 255]` 范围,并转回 `uint8` 数据类型以便保存或显示。 --- #### 使用伽马校正 伽马校正是一种简单的非线性亮度调整方法,适用于增强图像对比度或改变整体色调。其基本原理是对每个像素值施加幂次方运算 \( V_{out} = V_{in}^\gamma \)。 下面是伽马校正的一个简单例子: ```python def adjust_gamma(image, gamma=1.0): invGamma = 1.0 / gamma table = np.array([((i / 255.0) ** invGamma) * 255 for i in range(256)]).astype("uint8") return cv2.LUT(image, table) # 加载图像 image_bgr = cv2.imread('input_image.jpg') # 进行伽马校正 (例如设置 gamma=2.2) adjusted_image = adjust_gamma(image_bgr, gamma=2.2) # 显示结果 cv2.imshow('Original Image', image_bgr) cv2.imshow('Adjusted Gamma Image', adjusted_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 此代码片段展示了如何利用查找表 (`LUT`) 来高效地执行伽马校正。 --- #### 注意事项 - 如果需要处理 Alpha 通道(透明度),可以在读取图像时指定标志位 `cv2.IMREAD_UNCHANGED`,从而保留第四维的数据。 - 在某些场景下,可能还需要考虑白平衡算法或者更复杂的色彩管理流程[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值