python opencv灰度变换

灰度变换

灰度变换和二值化的区别:

  • 灰度变换是调整调整图像的灰度动态范围或图像对比度
  • 二值化是将图像的每个像素点调至0或255,只呈现白色或黑色
1.灰度化处理

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

直接调用opencv中的函数,读入的图片可以与代码文件放在一起这样可以省略输入图片路径。

python 复制代码
#读入原始图像
img=cv2.imread('test.jpg')
#灰度化处理
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
二值化
python 复制代码
#二值化处理
ret,im_fixed=cv2.threshold(gray,50,255,cv2.THRESH_BINARY)

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

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

  • 方法一:固定阈值二值化
python 复制代码
# function:将灰度图片转为二值化图片,方法一:固定阈值二值化
import cv2 as cv

gray_img = cv.imread('./img/gray_img.png')

# 二值化函数
ret, erzhihua_img = cv.threshold(gray_img, 100, 255, cv.THRESH_BINARY)

cv.imshow('erzhihua_img', erzhihua_img)
cv.imwrite('./img/erzhihua_img.png', erzhihua_img)
cv.waitKey(0)
cv.destroyAllWindows()
  • 方法二:算术平均的自适应二值化
python 复制代码
# function:算术平均的自适应二值化
import cv2 as cv

# 这里很奇怪,不能直接传灰度图片的imread路径,要直接是灰度图片,像下面这样
img = cv.imread('./img/img.png')
gray_img = cv.cvtColor(img, cv.COLOR_RGB2GRAY)

# 二值化函数
erzhihua_img = cv.adaptiveThreshold(gray_img, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 11, 2)

cv.imshow('erzhihua_img', erzhihua_img)
cv.imwrite('./img/erzhihua1_img.png', erzhihua_img)
cv.waitKey(0)
cv.destroyAllWindows()
  • 方法三:高斯加权均值法自适应二值化
python 复制代码
# function:高斯加权均值法自适应二值化
import cv2 as cv

# 这里很奇怪,不能直接传灰度图片的imread路径,要直接是灰度图片,像下面这样
img = cv.imread('./img/img.png')
gray_img = cv.cvtColor(img, cv.COLOR_RGB2GRAY)

# 二值化函数
erzhihua_img = cv.adaptiveThreshold(gray_img, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 8)

cv.imshow('erzhihua_img', erzhihua_img)
cv.imwrite('./img/erzhihua2_img.png', erzhihua_img)
cv.waitKey(0)
cv.destroyAllWindows()

线性变化和非线性变化



对数变换

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

python 复制代码
import cv2 as cv
import copy
import math

# 读入原始图像
img = cv.imread('./img/img.png', 1)

# 灰度化处理:此灰度化处理用于图像二值化
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

# 对数变换
logc = copy.deepcopy(gray)
rows = img.shape[0]
cols = img.shape[1]
for i in range(rows):
    for j in range(cols):
        logc[i][j] = 10 * math.log(1 + logc[i][j])

# 通过窗口展示图片 第一个参数为窗口名 第二个为读取的图片变量

cv.imshow('logc', logc)
cv.imwrite('./img/logc_img.png', logc)

cv.waitKey(0)
cv.destroyAllWindows()
python 复制代码
# 对数变换
logc = copy.deepcopy(gray)
for i in range(rows):
    for j in range(cols):
        logc[i][j] = 3 * math.log(1 + logc[i][j])

反色变换

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

python 复制代码
#补色变换
cover=copy.deepcopy(gray)
for i in range(rows):
    for j in range(cols):
        cover[i][j]=255-cover[i][j]

伽马变换

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

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

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


python 复制代码
import cv2 as cv
import numpy as np


# gamma correction
def gamma_correction(img, c=1, g=2.5):
    out = img.copy()
    out /= 255.
    out = (1 / c * out) ** (1 / g)
    out *= 255
    out = out.astype(np.uint8)
    return out


# Read image
img = cv.imread('./img/img.png').astype(np.float)

# Gammma correction
out = gamma_correction(img)

# Save result
cv.imshow("result", out)
cv.imwrite("./img/gamma1.jpg", out)
cv.waitKey(0)
cv.destroyAllWindows()
python 复制代码
#伽马变换
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.8)


gamma变换代码2

python 复制代码
import cv2 as cv
import copy

# 读入原始图像
img = cv.imread('./img/img.png', 1)

# 伽马变换
gamma = copy.deepcopy(img)
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.5)

cv.imshow('gamma', gamma)
cv.imwrite("./img/gamma2.jpg", gamma)
cv.waitKey(0)
cv.destroyAllWindows()
相关推荐
kyle~9 小时前
深度学习---长短期记忆网络LSTM
人工智能·深度学习·lstm
xrgs_shz9 小时前
什么是LLM、VLM、MLLM、LMM?它们之间有什么关联?
人工智能·计算机视觉
DatGuy9 小时前
Week 36: 量子深度学习入门:辛量子神经网络与物理守恒
人工智能·深度学习·神经网络
说私域9 小时前
日本零售精髓赋能下 链动2+1模式驱动新零售本质回归与发展格局研究
人工智能·小程序·数据挖掘·回归·流量运营·零售·私域运营
千里马也想飞9 小时前
汉语言文学《朝花夕拾》叙事艺术研究论文写作实操:AI 辅助快速完成框架 + 正文创作
人工智能
玉梅小洋9 小时前
解决 VS Code Claude Code 插件「Allow this bash command_」弹窗问题
人工智能·ai·大模型·ai编程
肾透侧视攻城狮9 小时前
《解锁计算机视觉:深度解析 PyTorch torchvision 核心与进阶技巧》
人工智能·深度学习·计算机视觉模快·支持的数据集类型·常用变换方法分类·图像分类流程实战·视觉模快高级功能
一战成名9969 小时前
AI 模型持续集成流水线:CANN 支持的 DevOps 最佳实践
人工智能·ci/cd·devops
墨理学AI9 小时前
一文学会一点python数据分析-小白原地进阶(mysql 安装 - mysql - python 数据分析 - 学习阶段梳理)
python·mysql·数据分析
23遇见9 小时前
AI视角下的 CANN 仓库架构全解析:高效计算的核心
人工智能