在做检测过程中发现光照对于检测的精度影响很大,为了不增加采集标注数据工作量,增加了光照数据集来增强检测效果。

代码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()

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐