opencv-对金属管件等光照不均匀或炫光图像进行处理达到偏振滤拍摄效果

import cv2,os
import numpy as np

def mask(path):
    img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
    _,mask = cv2.threshold(img,80,255,cv2.THRESH_BINARY)
    return mask

def repair(img,mask):
    rep = cv2.resize(img,None,fx=0.6,fy=0.6,interpolation=cv2.INTER_CUBIC)
    # print(type(mask))
    mask = cv2.resize(mask(img_path),None,fx=0.6,fy=0.6,interpolation=cv2.INTER_CUBIC)
    dst = cv2.illuminationChange(rep,mask)
    return dst

if __name__ == '__main__':
    # path = r'./1.jpg'
    # path = r"D:\install\Meshroom-2020.1.1-win64\Meshroom-2020.1.1\data\input\04_04"
    # mask = mask(path)
    # img = cv2.imread(path)
    # dst = repair(img,mask)
    # cv2.imshow("a",dst)
    # cv2.waitKey()
    # # cv2.imwrite('1-1.jpg', dst)

#下面尝试批量

    file_root = r'D:\install\Meshroom-2020.1.1-win64\Meshroom-2020.1.1\data\input\04_04'  # 当前文件夹下的所有图片
    file_list = os.listdir(file_root)
    save_out = r"D:\install\Meshroom-2020.1.1-win64\Meshroom-2020.1.1\data\input\04_04\out"  # 保存图片的文件夹名称
    for img_name in file_list:
        if img_name.endswith('.jpg'):
            img_path = file_root + "\\"+ img_name
            img = cv2.imread(img_path)
            dst = repair(img, mask)

            I = cv2.imread(img_path, -1)
            # image = sitk.ReadImage(".dcm")#读dcm
            # inputImg = np.squeeze(sitk.GetArrayFromImage(image))#读dcm
            # print(I.shape)
            # M, N = I.shape
            out_name = img_name.split('.')[0]
            save_path = save_out + "\\" + out_name + '.jpg'
            cv2.imwrite(save_path, dst)
        print(img_name + "保存成功")

效果:
在这里插入图片描述
在这里插入图片描述

若遇到src错误:


 1. opencv降低版本3.4左右
 2. print(type(mask))3. def repair(img,mask):
    rep = cv2.resize(img,None,fx=0.6,fy=0.6,interpolation=cv2.INTER_CUBIC)
    # print(type(mask))
    mask = cv2.resize(mask(img_path),None,fx=0.6,fy=0.6,interpolation=cv2.INTER_CUBIC)
    dst = cv2.illuminationChange(rep,mask)
    return dst
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 光照均匀是指图像中的光源分布不均匀,导致图像的亮度在不同区域存在差异。光照均匀常出现在拍照、摄影等场景中,会影响图像的质量和视觉效果。 在opencv中,我们可以采用以下方法来处理光照均匀的问题: 1. 直方图均衡化:直方图均衡化是一种常见的图像增强技术,通过将图像的像素值映射到更平均的直方图上来均衡化图像的亮度。在opencv中,可以使用`cv2.equalizeHist()`函数来实现直方图均衡化。 2. 伽马校正:伽马校正是一种通过改变图像的亮度曲线来调整图像亮度的方法。在opencv中,可以使用`cv2.LUT()`函数来实现伽马校正。 3. 颜色校正:光照均匀问题往往伴随着色彩偏差,可以通过颜色校正来调整图像的颜色分布。我们可以使用`cv2.xphoto.createSimpleWB()`函数来实现简单的白平衡操作,进一步提升图像的色彩质量。 4. 图像分割和局部增强:可以采用图像分割的方法将图像分成多个区域,然后对每个区域进行局部增强处理,使得每个区域的光照均匀。在opencv中,可以使用基于图像梯度的分割算法,例如`cv2.grabCut()`和`cv2.watershed()`。 通过组合以上方法,我们可以在opencv中实现光照均匀图像处理。根据具体情况选择合适的方法,并根据需求调整参数,可以得到更好的处理效果。 ### 回答2: 光照均匀是指图像中不同区域的光照强度不一致。处理光照均匀的方法有很多种,下面介绍一个基于OpenCV的方法。 首先,我们可以使用OpenCV的cv2.imread函数将图像读入,并将其转换为灰度图像,以便于后续处理。接下来,可以使用OpenCV的cv2.medianBlur函数对图像进行中值波,以去除一些图像噪声。 然后,我们可以使用OpenCV的cv2.threshold函数将图像中的亮度区分为背景和前景。可以尝试不同的阈值来获取最佳的效果。阈值化后,可以使用OpenCV的cv2.distanceTransform函数计算图像中每个像素到最近背景像素的距离。 接着,我们可以对距离图像进行归一化,使所有像素值都在0到255之间。然后,我们可以对归一化的距离图像进行高斯波,以减少噪声。 最后,我们可以使用OpenCV的cv2.multiply函数将原始图像与归一化的距离图像相乘,以增强图像的低灰度区域,并使光照更加均匀。 最后,我们可以使用OpenCV的cv2.imshow函数显示处理后的图像,并使用cv2.waitKey函数等待用户按键以关闭窗口。 通过上述步骤,我们可以使用OpenCV图像光照均匀进行处理,使图像光照更加均匀,细节更加清晰。当然,具体的处理方法可能因图像的不同而有所差异,可以根据具体情况进行调整和优化。 ### 回答3: 在图像处理中,光照均匀是指图像中不同区域的光照强度不同,导致图像中部分区域的明暗度明显不同。光照均匀的问题常常会导致图像细节的丢失或者重要信息的隐藏,因此需要进行光照均匀处理OpenCV是一种经常被使用的图像处理库,提供了丰富的函数和工具来处理光照均匀问题。其中常用的方法是基于图像的直方图来进行调整。 一种简单的方法是使用直方图均衡化。该方法可以将图像的直方图调整为均匀分布,从而提高图像整体的对比度,使得光照均匀的问题得到一定程度的改善。OpenCV中提供了equalizeHist函数来实现直方图均衡化操作。 另外,OpenCV还提供了一些更加高级的光照均匀化方法,如adaptiveEqualizeHist函数。该方法在直方图均衡化的基础上,根据图像的局部特征进行自适应调整,从而更好地保留图像的细节信息。 除了直方图均衡化,还可以使用其他的方法来解决光照均匀问题,比如基于图像分割的方法、利用光照模型进行估计和调整等。具体的方法选择可以根据实际情况和需求来决定。 总之,OpenCV提供的丰富功能和方法可以帮助我们有效地处理光照均匀的问题。通过选择合适的方法和参数,我们可以实现对图像光照均匀化的需求,从而改善图像的质量和视觉效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值