CV:利用opencv对图片的亮度增强方法

1. 背景

在CV领域,算法工(tiao)程(can)师(xia)经常会遇到训练数据不足或训练数据多样性太少的问题。此时,我们需要通过算法来进行数据扩充或数据增强。数据增强的方法有很多(如翻转、镜像、旋转、亮度增强等),本篇我们来讲一个最常用的数据增强策略:亮度增强。

2.亮度增强

本篇基于opencv对图片进行亮度增强,闲话少说,直接上代码:

import cv2
import random
import numpy as np


def data_augment(image, brightness):
    factor = 1.0 + random.uniform(-1.0*brightness, brightness)
    table = np.array([(i / 255.0) * factor * 255 for i in np.arange(0, 256)]).clip(0,255).astype(np.uint8)
    image = cv2.LUT(image, table)
    return image, factor


imgpath = "./huluwa.jpg"
input_image = cv2.imread(imgpath)
for i in range(100):
    output_image, factor = data_augment(input_image, 0.5)
    # print(factor)
    cv2.imwrite(imgpath+str(factor)[:6]+".jpg", output_image)

上述代码主要是利用了opencv的cv2.LUT函数的功能,该函数全名为LookUpTable,函数使用方法如名字那样直接。下面看看该函数的效果如何。

3.可视化效果

原图,factor=0
变暗:factor=0.52
变暗,factor=0.75
变暗,factor=0.908

变亮,factor=1.12
变亮,factor=1.256
变亮,factor=1.49

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到图像增强时,OpenCV是一个非常强大的库。它提供了许多功能和算法,可以用于增强图像的质量、对比度、亮度等方面。下面是一些常见的图像增强技术和对应的OpenCV代码示例: 1. 直方图均衡化: 直方图均衡化是一种常用的图像增强技术,可以增强图像的对比度。OpenCV提供了`equalizeHist`函数来实现直方图均衡化。 ```cpp #include <opencv2/opencv.hpp> int main() { cv::Mat image = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE); cv::Mat equalizedImage; cv::equalizeHist(image, equalizedImage); cv::imshow("Equalized Image", equalizedImage); cv::waitKey(0); return 0; } ``` 2. 自适应直方图均衡化: 自适应直方图均衡化是一种改进的直方图均衡化方法,它可以根据图像的局部特征进行均衡化。OpenCV提供了`CLAHE`类来实现自适应直方图均衡化。 ```cpp #include <opencv2/opencv.hpp> int main() { cv::Mat image = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE); cv::Ptr<cv::CLAHE> clahe = cv::createCLAHE(); clahe->setClipLimit(4.0); cv::Mat equalizedImage; clahe->apply(image, equalizedImage); cv::imshow("Equalized Image", equalizedImage); cv::waitKey(0); return 0; } ``` 3. 锐化: 锐化可以增强图像的边缘和细节。OpenCV提供了`filter2D`函数来实现锐化。 ```cpp #include <opencv2/opencv.hpp> int main() { cv::Mat image = cv::imread("input.jpg"); cv::Mat kernel = (cv::Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); cv::Mat sharpenedImage; cv::filter2D(image, sharpenedImage, -1, kernel); cv::imshow("Sharpened Image", sharpenedImage); cv::waitKey(0); return 0; } ``` 这只是一些常见的图像增强技术和对应的OpenCV代码示例。根据具体的需求,还可以使用其他OpenCV函数和算法来实现更多的图像增强效果。如果你有具体的需求或者其他问题,请告诉我,我会尽力帮助你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值