contrast_factor: 对比度因子:调整对比度的因子区间,应该在0-3之间
brightness_delta: 亮度增量:添加到像素的量在-1和1之间的间隔
hue_delta:色度增量:为添加到色调通道的量在-1和1之间的间隔
saturation_factor:饱和系数:因子乘以每个像素的饱和值的区间
def
__init__
(
self
,
contrast_factor
,
brightness_delta
,
hue_delta
,
saturation_factor
self
.
contrast_factor
=
contrast_factor
self
.
brightness_delta
=
brightness_delta
self
.
hue_delta
=
hue_delta
self
.
saturation_factor
=
saturation_factor
def
__call__
(
self
,
image
)
:
将视觉效果应用到图片上
if
self
.
contrast_factor
:
image
=
self
.
adjust_contrast
(
image
,
self
.
contrast_factor
)
if
self
.
brightness_delta
:
image
=
self
.
adjust_brightness
(
image
,
self
.
brightness_delta
)
if
self
.
hue_delta
or
self
.
saturation_factor
:
image
=
cv2
.
cvtColor
(
image
,
cv2
.
COLOR_BGR2HSV
)
if
self
.
hue_delta
:
image
=
self
.
adjust_hue
(
image
,
self
.
hue_delta
)
if
self
.
saturation_factor
:
image
=
self
.
adjust_saturation
(
image
,
self
.
saturation_factor
)
image
=
cv2
.
cvtColor
(
image
,
cv2
.
COLOR_BGR2HSV
)
image
=
cv2
.
cvtColor
(
image
,
cv2
.
COLOR_BGR2RGB
)
return
image
def
adjust_saturation
(
self
,
image
,
factor
)
:
调整图片的饱和度
image
[
.
.
.
,
1
]
=
np
.
clip
(
image
[
.
.
.
,
1
]
*
factor
,
0
,
255
)
return
image
def
adjust_hue
(
self
,
image
,
delta
)
:
调整图片的色度
添加到色调通道的量在-1和1之间的间隔。
如果值超过180,则会旋转这些值。
image
[
.
.
.
,
0
]
=
np
.
mod
(
image
[
.
.
.
,
0
]
+
delta
*
180
,
180
)
return
image
def
adjust_contrast
(
self
,
image
,
factor
)
:
调整一张图像的对比度
mean
=
image
.
mean
(
axis
=
0
)
.
mean
(
axis
=
0
)
return
self
.
_clip
(
(
image
-
mean
)
*
factor
+
mean
)
def
adjust_brightness
(
self
,
image
,
delta
)
:
调整一张图片的亮度
return
self
.
_clip
(
image
+
delta
*
255
)
def
_clip
(
self
,
image
)
:
剪辑图像并将其转换为np.uint8
return
np
.
clip
(
image
,
0
,
255
)
.
astype
(
np
.
uint8
)
def
_uniform
(
val_range
)
:
随机返回值域之间的数值
return
np
.
random
.
uniform
(
val_range
[
0
]
,
val_range
[
1
]
)
def
_check_range
(
val_range
,
min_val
=
None
,
max_val
=
None
)
:
检查间隔是否有效
if
val_range
[
0
]
>
val_range
[
1
]
:
raise
ValueError
(
'interval lower bound > upper bound'
)
if
min_val
is
not
None
and
val_range
[
0
]
<
min_val
:
raise
ValueError
(
'invalid interval lower bound'
)
if
max_val
is
not
None
and
val_range
[
1
]
>
max_val
:
raise
ValueError
(
'invalid interval upper bound'
)
def
random_visual_effect_generator
(
contrast_range
=
(
0.9
,
1.1
)
,
brightness_range
=
(
-
.1
,
.1
)
,
hue_range
=
(
-
0.05
,
0.05
)
,
saturation_range
=
(
0.95
,
1.05
)
)
:
_check_range
(
contrast_range
,
0
)
_check_range
(
brightness_range
,
-
1
,
1
)
_check_range
(
hue_range
,
-
1
,
1
)
_check_range
(
saturation_range
,
0
)
def
_generate
(
)
:
while
True
:
yield
VisualEffect
(
contrast_factor
=
_uniform
(
contrast_range
)
,
brightness_delta
=
_uniform
(
brightness_range
)
,
hue_delta
=
_uniform
(
hue_range
)
,
saturation_factor
=
_uniform
(
saturation_range
)
return
_generate
(
)
if
__name__
==
"__main__"
:
path
=
"C:/Users/Administrator/Desktop/learning_image/lena.jpg"
image
=
np
.
asarray
(
Image
.
open
(
path
)
)
visual_effect_generator
=
random_visual_effect_generator
(
contrast_range
=
(
0.9
,
1.1
)
,
brightness_range
=
(
-
0.1
,
0.1
)
,
hue_range
=
(
-
0.05
,
0.05
)
,
saturation_range
=
(
0.95
,
1.05
)
)
visual_effect
=
next
(
visual_effect_generator
)
image
=
visual_effect
(
image
)
plt
.
imshow
(
image
)
以lena图为例
调整之前
调整后
直接上代码# -*- coding: utf-8 -*-"""Created on Thu Apr 23 22:29:54 2020@author: Administrator"""import numpy as npimport cv2from PIL import Imagefrom matplotlib import pyplot as plt#VisualEffec...
https://www.tensorflow.org/api_docs/
python
/tf/image/random_brightness
Adjust the brightness of images by a random factor.
该函数用于
随机
调整
图像的
亮度
。
tf.image.random_brightness(
image, max_del...
python
opencv调节
图片
亮度
与
对比度
亮度
调整
是将图像像素的强度整体变大/变小,
对比度
调整
指的是图像暗处变得更暗,亮出变得更亮,从而拓宽某个区域内的显示精度。
创建两个滑动条分别
调整
对比度
和
亮度
(
对比度
范围:0 ~ 0.3,
亮度
0 ~ 100)。提示:因为滑动条没有小数,所以可以设置为0 ~ 300,然后乘以0.01
import cv2
import numpy as np
1.Image.open(image_path) 进行
图片
的打开
参数说明:image_path 表示
图片
的路径
2. ImageEnhance.Brightness(image) # 进行
图片
的
亮度
变化
enhance_image.enhance(0.3)
参数说明:image表示需要进行
亮度
变化的
图片
3. ImageEnhance.Contrast(image)
...
fImg = img.astype(np.float32)
fImg = fImg / 255.0
# HLS空间,三个通道分别是: Hue色相、lightness明度、saturation
饱和度
# 通道0是色相、通道
tensorflow图像处理
通过
随机
调整
图像
亮度
/
对比度
/
饱和度
/色相,可以衍生出更多的训练样本,减小识别物体不同的大小/方位/色彩等无关因素对图像识别模型的影响.且
调整
顺序不同可以得到不同的处理结果.
#!/usr/bin/
python
# coding:utf-8
# 图像预处理
import tensorflow as tf
import numpy as np
impor...
# 映射表
table_b = np.array([((i / 255) * alpha_b + gamma_b) if ((i / 255) * alpha_b + gamma_b) > 0 else 0 for i in range(0, 256)]).astype("uint8")
image = cv2.LUT(image, table_b)
#
对比度
调整
if contrast != 0:
f = 131 * (contrast + 127) / (127 * (131 - contrast))
alpha_c = f
gamma_c = 127 * (1 - f)
# 映射表
table_c = np.array([((i / 255) * alpha_c + gamma_c) if ((i / 255) * alpha_c + gamma_c) > 0 else 0 for i in range(0, 256)]).astype("uint8")
image = cv2.LUT(image, table_c)
return image
# 读取
图片
img = cv2.imread('test.jpg')
# 创建窗口
cv2.namedWindow('image')
# 创建滑块
cv2.createTrackbar('Brightness', 'image', 0, 100, lambda x: None)
cv2.createTrackbar('Contrast', 'image', 0, 100, lambda x: None)
while True:
# 获取滑块值
brightness = cv2.getTrackbarPos('Brightness', 'image') - 50
contrast = cv2.getTrackbarPos('Contrast', 'image') - 50
#
调整
亮度
和
对比度
img_adjust = adjustBrightnessContrast(img, brightness, contrast)
# 显示
图片
cv2.imshow('image', img_adjust)
# 按下Q键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放窗口和摄像头
cv2.destroyAllWindows()
您可以按照上述步骤来实现
Python
滑块
调整
图片
亮度
和
对比度
。希望能对您有所帮助。