添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

有时候许多图像的对比度较低,在进行特征区域的识别时较为困难,下面我们利用几种方法进行分析,如何提高图像的对比度。
step 1:
利用下面代码,看一下原图像

import cv2 import numpy as np import matplotlib . pyplot as plt
#读取外部图像并显示
def ReadAndShowImage():
    image = cv2.imread("00.jpg")
    cv2.imshow("OriginImage", image)
    cv2.waitKey(0)

在这里插入图片描述原图整体较黑,无法清晰明显的得到图像中的数字

step 2:
利用灰度直方图大致看一下灰度分布

#计算图像的灰度直方图
def GainHist():
    image = cv2.imread("00.jpg")
    grayImage = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    restHist = cv2.calcHist(grayImage,[0],None,[256],[0,256])
    plt.title("Hist of GrayImage")
    plt.xlabel("Amount of Pixel")
    plt.ylabel("Gray Scale")
    plt.plot(restHist)
    plt.savefig("hist")
    #plt.show()

灰度直方图如下
在这里插入图片描述
可以发现,大部分的图像像素都集中在灰度值较小的范围,这也是造成图像较黑的主要原因。能不能将他“拉直”一点,将像素集中到x轴的中间靠上部分
下面代码主要实现这个功能

#直方图均衡化
def EqualHist():
    image = cv2.imread("00.jpg")
    grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    equalHist = cv2.equalizeHist(grayImage,None)
    hist = cv2.calcHist(equalHist,[0],None,[256],[0,255])
    plt.title("EqualHist of GrayImage")
    plt.xlabel("Amount of Pixel")
    plt.ylabel("Gray Scale")
    plt.plot(hist)
    #plt.savefig("Equalhist")
    # plt.show()
    cv2.imshow("EqualHist",equalHist)
    cv2.imwrite("equalHist.jpg",equalHist)
    cv2.waitKey(0)

上面代码的效果如下图所示
在这里插入图片描述
在这里插入图片描述
上面经过均衡化后的图像,对比度明显较原图得到增强,效果也比较明显,最后我们要的肯定不是灰度图像,干扰太多了,二值化图像就可以避免这个问题,我们继续向下看

#在对比度受限的情况下,可以使用下面的方法进行
#自适应直方图均衡
def AdaptHist():
    image = cv2.imread("00.jpg")
    grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    equalHist = cv2.equalizeHist(grayImage, None)
    #自适应直方图均衡,参数是自适应的阈值
    adapthist = cv2.createCLAHE(clipLimit=40)
    imageAdaptHist = adapthist.apply(equalHist)
    cv2.imshow("adapthistimage",imageAdaptHist)
    cv2.imwrite("adapthist.jpg",imageAdaptHist)
    cv2.waitKey(0)

效果入下
在这里插入图片描述
上面照片比直方图均衡化后的图像,左下角好像没有那么白
通过对OpenCV提供的下面的一些参数,我们按照顺序统统试一下,看看有什么区别
cv2.THRESH_BINARY
cv2.THRESH_BINARY_INV
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV
cv2.THRESH_OTSU
cv2.THRESH_TRIANGLE

#得到不同阈值
def Threshs():
    image = cv2.imread("00.jpg")
    grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    equalHist = cv2.equalizeHist(grayImage, None)
    # 自适应直方图均衡,参数是自适应的阈值
    adapthist = cv2.createCLAHE(clipLimit=40)
    imageAdaptHist = adapthist.apply(equalHist)
    thresh = 60
    max_val = 255
    ret, out1 = cv2.threshold(imageAdaptHist, thresh, max_val,cv2.THRESH_BINARY)
    ret, out2 = cv2.threshold(imageAdaptHist, thresh, max_val, cv2.THRESH_BINARY_INV)
    ret, out3 = cv2.threshold(imageAdaptHist, thresh, max_val, cv2.THRESH_TRUNC)
    ret, out4 = cv2.threshold(imageAdaptHist, thresh, max_val, cv2.THRESH_TOZERO)
    ret, out5 = cv2.threshold(imageAdaptHist, thresh, max_val,  cv2.THRESH_TOZERO_INV)
    ret, out6 = cv2.threshold(imageAdaptHist, thresh, max_val, cv2.THRESH_OTSU)
    ret, out7 = cv2.threshold(imageAdaptHist, thresh, max_val, cv2.THRESH_TRIANGLE)
    inal = np.concatenate((out1,out2,out3,out4), axis=0)
    inal1 = np.concatenate((out5,out6,out7), axis=0)
    cv2.imshow("test1",inal)
    cv2.imshow("test2",inal1)
    cv2.imwrite("test1.jpg",inal)
    cv2.imwrite("test2.jpg",inal1)
    cv2.waitKey(0)

在这里插入图片描述
在这里插入图片描述
嗯。。区别还是挺明显的,不过我最喜欢最后那个实验结果图,尽管有些不完整,最起码背景不那么复杂,比较好处理。
上面那些图像的高低阈值是我自己随便设置的,主观依赖性比较大,下面试试自适应阈值的方法

#自适应阈值处理
def AdaptThresh():
    grayimage = cv2.imread('00.jpg', 0)
    thresh1 = cv2.adaptiveThreshold(grayimage, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
    thresh2 = cv2.adaptiveThreshold(grayimage, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 31, 3)
    thresh3 = cv2.adaptiveThreshold(grayimage, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 13, 5)
    thresh4 = cv2.adaptiveThreshold(grayimage, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 4)
    final = np.concatenate((thresh1, thresh2, thresh3, thresh4), axis=0)
    cv2.imshow("test1", final)
    cv2.imwrite("final.jpg", final)
    cv2.waitKey(0)

结果如下
在这里插入图片描述
好像不太行,不顾哦最后一张图像的效果已经很好了,著所以看着乱是因为背景是白色的原因,如果将图像减去255,效果立马就能感觉出来,这里我就不试了。

def result():
    gray_image = cv2.imread('00.jpg', 0)
    ret, thresh1 = cv2.threshold(gray_image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    cv2.imshow("test1", thresh1)
    cv2.imwrite("rest.jpg",thresh1)
    cv2.waitKey(0)

最后通过处理可以得到处理后的图像,如下所示
在这里插入图片描述
有干扰,尤其是左下角部分,但是整体上我们感兴趣的区域最起码可以看清了,而且效果还不错,应该不会影响对单个数字的分割,有兴趣的可以试试。

有时候许多图像的对比度较低,在进行特征区域的识别时较为困难,下面我们利用几种方法进行分析,如何提高图像的对比度。step 1:利用下面代码,看一下原图像#导包import cv2import numpy as npimport matplotlib.pyplot as plt#读取外部图像并显示def ReadAndShowImage(): image = cv2.imread("00.jpg") cv2.imshow("OriginImage", image) c
基于c++和opencv实现亮度图像增强源码(课程设计作业).zip基于c++和opencv实现亮度图像增强源码(课程设计作业).zip基于c++和opencv实现亮度图像增强源码(课程设计作业).zip基于c++和opencv实现亮度图像增强源码(课程设计作业).zip 【资源介绍】 对于亮度图像增强 visual studio 2015 + Opencv3.3.1 针对的是图像,不是视频。实现的是原论文内容的前半部分。 test.cpp是源程序 test_1.bmp是待增强图像 result.bmp是增强后的结果。
1. 背景 在CV领域,算法工(tiao)程(can)师(xia)经常会遇到训练数据不足或训练数据多样性太少的问题。此时,我们需要通过算法来进行数据扩充或数据增强。数据增强的方法有很多(如翻转、镜像、旋转、亮度增强等),本篇我们来讲一个最常用的数据增强策略:亮度增强。 2.亮度增强 本篇基于opencv对图片进行亮度增强,闲话少说,直接上代码: import cv2 import random import numpy as np def data_augment(image, brightness):
在光线不足的情况下拍出好照片对非摄影师来说似乎很神奇。完成弱光摄影需要技巧、经验和合适的设备的结合。在光下拍摄的图像缺乏色彩和独特的边缘。它们还存在能见度和深度未知的问题。这些缺点使此类图像不适合个人使用或图像处理或计算机视觉任务。我们将学习改善夜间图像的照明。 对于没有摄影技能的人,我们可以使用图像处理技术来增强这些图像。Shi等人在他们的论文“使用亮/暗通道先验对单一图像进行夜间照度图像增强”中提出了一种方法。这篇论文将作为这篇文章的基础。
在做检测过程中发现光照对于检测的精度影响很大,为了不增加采集标注数据工作量,增加了光照数据集来增强检测效果。 代码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
一、去逆光 逆光是拍摄时经常会出现的问题,我们的去逆光技术可以有效增强逆光状态下拍摄的图像质量,显著提高逆光状态下的人脸识别准确率。 链接1: OpenCV之光照补偿和去除光照 链接2: OpenCV高亮图片处理 二、照度增强 在夜间,光照不足会导致图像的成像质量非常糟糕,照度增强技术可以有效增强图像的亮度,恢复图像的细节,对于夜间的视频监控、车牌识别具有很大帮助。 链接3: OpenCV照度图像增强 链接4: 照度图像增强 三、去模糊 图像模糊处理选择突出或抑制图像中的部分特征,通过提升亮
def random_crop(img, area_ratio, hw_vari): """ :param img: :param area_ratio: 裁剪画面占原画面比例(0,0.5) :param hw
照度图像增强计算机视觉中一个重要的问题,而LIME算法是一种有效的照度图像增强技术。在C语言实现LIME算法时,首先需要理解算法的原理和数学模型。 LIME算法的主要思路是将照度图像分解为明亮部分和暗部分,对这两部分分别进行增强,最终将它们组合起来得到亮度更加均匀的图像。具体实现时,可以按照以下步骤进行: 1.将输入的照度图像转换为灰度图像,并将其分为明暗两部分。 2.对明亮部分进行直方图均衡化(Histogram Equalization)处理,使图像中灰度级分布更加均匀。 3.对暗部分进行对比度增强,常采用的增强方法有拉伸(Stretch)和直方图匹配(Histogram Matching)。 4.将增强后的明暗两部分图像重新组合起来,得到最终的照度图像增强结果。 在C语言中实现LIME算法时,可使用OpenCV图像处理库进行图像读取和处理,并使用数学函数进行直方图均衡化和对比度增强等操作。同时,需要注意算法的效率和稳定性,避免出现算法实现中的bug和问题。 总之,照度图像增强LIME算法在C语言实现涉及到多种图像处理方法和数学知识,需要仔细的实现和测试才能得到有效的增强结果。