python(+opencv2+numpy)对彩色图像的RGB通道提取、合成、显示并计算灰度图像

一、image中RGB通道提取,直接上代码很简单

import cv2

Import sys

import numpy as np

image = cv2.imread(sys.argv[1], cv2.IMREAD_COLOR)

b = image[:, :, 0]

g = image[:, :, 1]

r = image[:, :, 2]

也可以直接用opencv的split函数

(b, g, r) = cv2.split(image)

 

上面得到r g b是一维矩阵,要是直接cv2.imshow(“b”,b)的话,显示的是一张灰度图(值为0~255),如果要显示对应的颜色通道,还需要把另外的两个通道补0,如何做呢?

(1)可以使用cv2的merge函数,比如单独显示b通道,可以这样补:

image_b = cv2.merge([b, np.zeros(b.shape, np.uint8), np.zeros(b.shape, np.uint8)])

其中np.zeros(b.shape,np.uint8)表示创建一个和b矩阵维度一样,每个数据初始值的类型为uint8并且值为0的矩阵。

(2)还可以使用numpy中提供的dstack函数来实现:

image_b = np.dstack((b, np.zeros(b.shape, np.uint8), np.zeros(b.shape, np.uint8)))

numpy提供了很多矩阵合并的计算函数。比如:

np.append()

np.concaten

### PythonOpenCV 实现图像去噪的方法 在计算机视觉领域,图像去噪是一个常见的预处理步骤。通过减少图像中的噪声干扰,可以提高后续算法的性能。OpenCV 提供了一个强大的函数 `cv2.fastNlMeansDenoisingColored()` 来执行彩色图像的降噪操作[^1]。 以下是完整的代码示例以及解释: #### 安装依赖库 为了运行下面的代码,请确保已安装所需的库: ```bash pip install opencv-python-headless matplotlib numpy ``` #### 使用 `cv2.fastNlMeansDenoisingColored` 去除彩色图像噪声 以下代码展示了如何加载一张图片对其进行去噪处理: ```python import cv2 import numpy as np import matplotlib.pyplot as plt # 加载原始图像 img = cv2.imread('img.jpg') # 将BGR颜色空间转换为RGB以便于显示 rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 调用fastNlMeansDenoisingColored进行去噪 dst = cv2.fastNlMeansDenoisingColored(rgb_img, None, 10, 10, 7, 21) # 显示原图和去噪后的效果对比 plt.figure(figsize=(10, 5)) plt.subplot(121), plt.title("Original Image"), plt.imshow(rgb_img) plt.subplot(122), plt.title("Denoised Image"), plt.imshow(dst) plt.tight_layout() plt.show() ``` 上述代码中使用的参数说明如下: - **h**: 彩色图像的空间域滤波强度,默认值通常设置为10。 - **hColor**: 颜色域滤波强度,一般取值与 h 相同或稍小一些。 - **templateWindowSize**: 搜索窗口大小,默认值为7。 - **searchWindowSize**: 进行估计时考虑的最大范围,默认值为21。 这些参数可以根据实际需求调整以获得最佳效果。 对于灰度图像,则可使用另一种方法 `cv2.fastNlMeansDenoising()`,其功能类似于前者但专用于单通道数据[^2]。 如果输入的是多张带噪声的图像列表形式的数据结构,在批量处理前可能还需要先将其裁剪至合理范围内再转成无符号整型数组格式保存下来作为最终结果输出给用户查看或者进一步分析计算等等过程都需要特别注意边界条件等问题以免造成程序崩溃等情况发生。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值