python opencv灰度变换

server/2024/11/13 11:39:07/

灰度变换

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

  • 灰度变换是调整调整图像的灰度动态范围或图像对比度
  • 二值化是将图像的每个像素点调至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 cvgray_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 *= 255out = 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()

在这里插入图片描述


http://www.ppmy.cn/server/140867.html

相关文章

WPF MVVM入门系列教程(三、数据绑定)

本文主要介绍WPF的数据绑定(Data Binding)功能,如果你已经熟悉本文的内容,可以跳过并直接阅读后面的文章。 什么是数据绑定 我们先来看一下MSDN上的说明: 数据绑定是在应用 UI 与其显示的数据之间建立连接的过程。 如…

MATLAB中,clear的使用方法

在MATLAB中,clear 命令是一个非常重要的工具,用于管理工作空间中的变量。其主要功能是清除变量,以帮助用户保持环境的整洁并避免潜在的命名冲突。以下是 clear 命令的详细使用方法和相关信息。 1. 基本用法 清除所有变量:clear此命令会清除当前工作空间中的所有变量。这意味…

[java][JDK]JDK8新特性

使用匿名内部类存在的问题 当需要启动一个线程去完成任务时,通常会通过 Runnable 接口来定义任务内容,并使用 Thread 类来启动该线程。 传统写法,代码如下: public class Demo01LambdaIntro {public static void main(String[] args) {new …

swagger、Postman、Test测试都能过,代码没问题但项目仍然不成功

swagger、Postman、Test测试都能过,代码没问题但项目仍然不成功 前端缓存问题!!!!!!!!!!!! swagger、Postman、test测试…

【GCN】 代码详解 (1) 如何运行【pytorch】可运行版本

Graph Convolutional Networks 代码详解 前言0.引言1.环境配置2. 代码的运行2.1 报错处理2.2 运行结果 3.总结 前言 在前文中,已经对图卷积神经网络(Graph Convolutional Neural Networks, GCN)的理论基础进行了深入探讨。接下来的章节将会进…

Hive中查看字段中是否包含某些字符串的函数

CREATE TABLE employee (name STRING,age INT );INSERT INTO employee VALUES(Alice, 25),(Bob, 30),(Charlie, 35),(David, 40); 首先我们在hive中创建表插入数据进行测试 方案一:like select * from employee where name like %i%; #返回name中包含i的数据 li…

linux盘扩容缩容

这里写目录标题 文件格式介绍问题:当根盘满了过后怎么办?解决方式: Xfs文件格式缩容扩容1. 备份2. 卸载home3. 缩容home(home盘为xfs文件格式)4. 扩容 /5. 恢复home备份 Ext4文件格式缩容扩容1. 备份(可选&…

泉州市工业和信息化局关于开展排查运维安全管理系统安全漏洞的通知

文章目录 引言附件1: 受影响版本和修复方案附件2:漏洞排查处置情况反馈表引言 接国家网络与信息安全信息通报中心通报,一款由北京圣博润高新技术股份有限公司研发的运维安全管理系统(俗称堡垒机)存在命令执行漏洞(CNVD-C-2024-781563、NVDB-CNVDB-2024768604)。攻击者可…