4.opencv+python实现暗通道去雾

17 篇文章 44 订阅 ¥19.90 ¥99.00

代码如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt


def zmMinFilterGray(src, r=7):
    '''最小值滤波,r是滤波器半径'''
    return cv2.erode(src, np.
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
通道算法是一种常用的图像去算法,适用于霾天气下的图像处理。下面我们将使用PythonOpenCV库来实现该算法。 首先,我们需要导入OpenCV库并读取原始图像。可以使用`cv2.imread()`函数来读取图像。 ```python import cv2 # 读取原始图像 image = cv2.imread('path_to_image.jpg') ``` 然后,我们需要计算图像的通道通道是指在一个局部小区域内,图像中最小像素值对应的通道。可以通过以下步骤来计算通道: 1. 将图像转换成灰度图像,可以使用`cv2.cvtColor()`函数来实现。 2. 创建一个与原始图像相同大小的空白图像作为输出结果。 3. 对于每个像素位置,计算其对应局部小区域的最小像素值,并将其赋值给输出图像。 ```python # 转换成灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 创建空白图像 dark_channel = np.zeros_like(gray) # 计算通道 for i in range(image.shape[0]): for j in range(image.shape[1]): neighborhood = gray[max(0, i-15):min(gray.shape[0], i+15), max(0, j-15):min(gray.shape[1], j+15)] dark_channel[i][j] = np.min(neighborhood) ``` 接下来,我们需要计算全局大气光A。全局大气光是指图像中像素值最高的区域,代表了环境中的浓度。可以通过以下步骤来计算全局大气光: 1. 根据通道图像,选择图像中亮度值较高的像素位置。 2. 在这些像素位置中选择其亮度值最高的像素位置作为全局大气光。 ```python # 选择图像中亮度值较高的像素 brightest_pixels = np.unravel_index(np.argsort(dark_channel.flatten())[-0.001 * dark_channel.size:], dark_channel.shape) brightest_values = gray[brightest_pixels] # 在亮度值较高的像素中选择亮度值最高的像素 A = np.max(brightest_values) ``` 最后,我们可以根据以下公式来恢复去图像: ```python t = 1 - 0.95 * dark_channel / A t = np.clip(t, 0.1, 1.0) result = np.zeros_like(image) for c in range(3): result[:, :, c] = (image[:, :, c] - A) / t + A ``` 将最终结果保存到文件中: ```python cv2.imwrite('path_to_result.jpg', result) ``` 通过以上步骤,我们可以使用PythonOpenCV库来实现通道算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加斯顿工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值