物流网站建设费用,app定制的价格开发,网页设计心得体会总结,wordpress版5.2深度学习很重要的预处理步骤 就是需要对做直方图均衡化 其中主要分成灰度图以及RGB图的直方图均衡化 这俩的方法和代码不同 想要去看具体原理的朋友可以查看下面这篇博客的内容 写的很详细颜色直方图均衡化(https://www.cnblogs.com/wancy/p/17668345.html)
我们这个场景中会用…深度学习很重要的预处理步骤 就是需要对做直方图均衡化 其中主要分成灰度图以及RGB图的直方图均衡化 这俩的方法和代码不同 想要去看具体原理的朋友可以查看下面这篇博客的内容 写的很详细颜色直方图均衡化(https://www.cnblogs.com/wancy/p/17668345.html)
我们这个场景中会用到的就是颜色直方图均衡化了 其中包含三种方法 方法1.在BGR颜色空间下进行直方图均衡化可以分别对每个通道进行均衡化。
以下是批量读取某个文件夹中的所有图片并对每张图片做RGB直方图均衡化使用OpenCV库实现彩色图像直方图均衡化在BGR颜色空间的代码
import cv2
import os
import shutilfilePath rF:\deepl\sample\complete\road3\white # 用于获取文件名称列表
new_path rF:\deepl\sample\complete\road3\white-rgb # 目标文件夹
#move_path rF:\deepl\sample\complete\water2\sat # 目标文件夹file_names filter(lambda x: x.find(png)!-1, os.listdir(filePath))# print(file_list)for file in file_names:
# 读取彩色图像pathfilePath\\fileimg cv2.imread(path)# 分离BGR图像的通道b, g, r cv2.split(img)# 对每个通道进行直方图均衡化equ_b cv2.equalizeHist(b)equ_g cv2.equalizeHist(g)equ_r cv2.equalizeHist(r)equ_img cv2.merge((equ_b, equ_g, equ_r))#合并均衡化后的通道# 显示均衡化前后的彩色图像path2new_path\\filecv2.imwrite(path2, equ_img)
#cv2.imshow(Original Image, img)
#cv2.imshow(Equalized Image, equ_img)
#cv2.waitKey(0)
#cv2.destroyAllWindows()
做均衡化前后的图片如下所示 但是由于我的图片中有些图片存在大面积白色因此均衡之后颜色就变成了这样 很明显由于白色区域的影响这个结果明显是不对的想了各种办法
1、比如用PS把白色区域删掉保存成png透明背景的再跑上面的代码结果不对
2、用PS把上面的白色区域先变成灰色再跑结果也还是不对
总结原因是因为我们上面的代码是做全局直方图均衡化并不是局部的因此即使是透明背景结果做出来也不对
而且为了只让我选定的区域做直方图均衡化其他区域不变
就需要用到下面的方法
基于掩模的特定区域直方图均衡化
这里也是参考了这位博主的文章
但这里他是对灰度图像做的我们要做的是RGB影像
因此我对代码进行了修改可以对RGB进行基于掩模的特定区域颜色直方图均衡化
话不多说
直接看代码
import cv2
import os
import numpy as npfilePath rF:\deepl\sample\complete\road3\white # 用于获取文件名称列表
new_path rF:\deepl\sample\complete\road3\white-rgb # 目标文件夹
mask_path rF:\deepl\sample\complete\road3\white-mask # 目标文件夹
#move_path rF:\deepl\sample\complete\water2\sat # 目标文件夹file_names filter(lambda x: x.find(png)!-1, os.listdir(filePath))# print(file_list)for file in file_names:
# 读取彩色图像pathfilePath\\filemask_pathmask_path\\fileimg cv2.imread(path)# 分离BGR图像的通道b, g, r cv2.split(img)mask cv2.imread(mask_path, 0)coord np.where(mask 255)print(coord)b_mask b[coord]g_mask g[coord]r_mask r[coord]# 对每个通道进行直方图均衡化equ_b cv2.equalizeHist(b_mask)equ_g cv2.equalizeHist(g_mask)equ_r cv2.equalizeHist(r_mask)equ_img cv2.merge((equ_b, equ_g, equ_r))#合并均衡化后的通道img2 img.copy()for i, C in enumerate(zip(coord[0], coord[1])):img2[C[0], C[1]] equ_img[i][0]# 显示均衡化前后的彩色图像path2new_path\\filecv2.imwrite(path2, img2)
#cv2.imshow(Original Image, img)
#cv2.imshow(Equalized Image, equ_img)
#cv2.waitKey(0)
#cv2.destroyAllWindows() 上面3张图分别是RGB原图黑白掩模均衡化后的结果
这下可以看出我们只对其中一部分指定区域做了均衡化
成功
但是如何批量化跑呢
我想要让程序自动从文件夹中读取图片自动将白色和非白色区域生成掩模然后自动读取后制作均衡化后的结果