zoukankan      html  css  js  c++  java
  • opencv2图像处理--灰度变换

    图片是由像素点矩阵组成的,对图片的操作即为对像素点矩阵的操作。只要在这个像素点矩阵中找到这个像素点的位置,比如第x行,第y列,所以这个像素点在这个像素点矩阵中的位置就可以表示成(x,y),因为一个像素点的颜色由红、绿、蓝三个颜色变量表示(R,G,B),所以我们通过给这三个变量赋值,来改变这个像素点的颜色。

    1:读入正常图片进行图片灰度处理

    import cv2,copy, math
    #读入原始图像
    img = cv2.imread('1.jpg')
    #灰度化处理
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    cv2.imwrite("2.jpg", gray)

    效果比对:

     图片的灰度化:将一个像素点的三个颜色变量相等,R=G=B,此时该值称为灰度值

     2:对灰度图像进行二值化处理

    # 二值化处理
    ret, im_fixed = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY)
    cv2.imwrite("3.jpg", im_fixed)

    二值化处理:将一个像素点的值突出为0,255,使得图片呈现黑白两种颜色。在灰度图像中像素值在0~255,二值化后图像中像素值为0或255。

    CV_THRESH_BINARY, //表示如果当前像素点的灰度值大于阈值(50)则将输出图像的对应位置像素值置为255,否则为0

    结果如下:

     3:对灰度图像进行伽马变换

    gamma = copy.deepcopy(gray)
    rows = img.shape[0]
    cols = img.shape[1]
    for i in range(rows):
        for j in range(cols):
            gamma[i][j] = 3*pow(gamma[i][j], 0.6)
    
    cv2.imwrite("4.jpg", gamma)

    伽马变换:用于图像增强,提升了暗部细节,简单来说就是通过非线性变换,让图像从暴光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫正。

    伽马值小于1时,会拉伸图像中灰度级较低的区域,同时会压缩灰度级较高的部分

    伽马值大于1时,会拉伸图像中灰度级较高的区域,同时会压缩灰度级较低的部分

    结果如下:

    4:对灰度图像进行反色或者对数变换

    对数变换:由于对数曲线在像素值较低的区域斜率大,在像素值较高的区域斜率较小,所以图像经过对数变换后,较暗区域的对比度将有所提升。可用于增强图像的暗部细节.。

    反色变换:对原图像像素值的颜色进行反转,即黑色变为白色,白色变为黑色。

    # 对灰度图像进行对数变换
    logc = copy.deepcopy(gray)
    for i in range(rows):
        for j in range(cols):
            logc[i][j] = 3 * math.log(1 + logc[i][j])
    
    cv2.imwrite("5.jpg", logc)
    
    # 对灰度图像进行反色变换
    cover = copy.deepcopy(gray)
    for i in range(rows):
        for j in range(cols):
            cover[i][j] = 255 - cover[i][j]
    
    cv2.imwrite("6.jpg", cover)

    结果如下:

    (反色变换)

    (对数变换)

    常用五种灰度图像处理方式:

    # 超过阈值部分取maxval(最大值),否则取0
    ret,thresh1 = cv2.threshold(gray_cat,127,255,cv2.THRESH_BINARY)
    # THRESH_BINARY 的反转
    ret,thresh2 = cv2.threshold(gray_cat,127,255,cv2.THRESH_BINARY_INV)
    # 大于阈值的部分设为阈值,否则不变
    ret,thresh3 = cv2.threshold(gray_cat,127,255,cv2.THRESH_TRUNC)
    # 大于阈值的部分不改变,否则设为0
    ret,thresh4 = cv2.threshold(gray_cat,127,255,cv2.THRESH_TOZERO)
    # THRESH_TOZERO 的反转
    ret,thresh5 = cv2.threshold(gray_cat,127,255,cv2.THRESH_TOZERO_INV)

  • 相关阅读:
    Bootstrap UI层收藏介绍
    你为什么离开上家公司?三大经典面试问题剖析
    浅谈常用的Web安全技术手段
    C#中yield关键字理解
    中小型研发团队架构实践三要点(转自原携程架构师张辉清)
    你确实应该学习并使用的 10 个 C# 特性
    ASP.NET MVC 异步Excel数据选择导出
    表格中控制tr的display:block在火狐中显示错乱的解决方法
    切图笔记
    表单验证jquery.validate
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/12837120.html
Copyright © 2011-2022 走看看