在做检测过程中发现光照对于检测的精度影响很大,为了不增加采集标注数据工作量,增加了光照数据集来增强检测效果。
代码1:选取需要光照增强的区域,直接将像素值增加到240-255之间。
import cv2
import matplotlib.pyplot as plt
import random
img = cv2.imread('000100000910000000098.jpg')
h,w,c = img.shape
print(h,w)
start_x = 510
start_y = 1000
for i in range(200):
for j in range(300):
if img[start_x+i,start_y+j][0] > 40:
a = random.randint(250,255)
b = random.randint(250,255)
c = random.randint(250,255)
img[start_x+i,start_y+j][0] = a
img[start_x+i,start_y+j][1] = b
img[start_x+i,start_y+j][2] = c
cv2.imwrite('test.jpg', img)
plt.imshow(img)
plt.show()
代码2:以图片为圆心,根据像素点与圆心的距离来进行不同程度的光照增强。
#coding:utf-8
import cv2
import math
import numpy as np
import matplotlib.pyplot as plt
#读取原始图像
img = cv2.imread('000100000910000000098.jpg')
#获取图像行和列
rows, cols = img.shape[:2]
#设置中心点
centerX = rows / 2
centerY = cols / 2
print (centerX, centerY)
radius = min(centerX, centerY)
print (radius)
#设置光照强度
strength = 200
#图像光照特效
for i in range(rows):
for j in range(cols):
#计算当前点到光照中心距离(平面坐标系中两点之间的距离)
distance = math.pow((centerY-j), 2) + math.pow((centerX-i), 2)
#获取原始图像
B = img[i,j][0]
G = img[i,j][1]
R = img[i,j][2]
if (distance < radius*radius):
#按照距离大小计算增强的光照值
result = (int)(strength*( 1.0 - math.sqrt(distance) / radius ))
B = img[i,j][0] + result
G = img[i,j][1] + result
R = img[i,j][2] + result
#判断边界 防止越界
B = min(255, max(0, B))
G = min(255, max(0, G))
R = min(255, max(0, R))
img[i,j] = np.uint8((B, G, R))
else:
img[i,j] = np.uint8((B, G, R))
#显示图像
cv2.imwrite('test.jpg', img)
plt.imshow(img)
plt.show()