基于python opencv的图像光照增强算法的代码实现。

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

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值