当前位置: 首页 > news >正文

Python----计算机视觉处理(opencv:图片灰度化)

一、灰度图与彩色图区别

        灰度图与彩色图最大的不同就是:彩色图是由R、G、B 三个通道组成,而灰度图只有一个通道,也称为单通道图像,所以彩色图转成灰度图的过程本质上就是 将R、G、B三通道合并成一个通道的过程。

二、灰度化 

读取图片 

import cv2
import numpy as np
img=cv2.imread('light.jpg')

获取 图片高和宽

img_shape=img.shape

 利用numpy创建等宽高的画布

img_gray=np.zeros((img_shape[0],img_shape[1]),np.uint8)

注意:

        shape:是ndarray的一个属性,用来查看数组的形状shape读取到的形状与图像的实际宽和高是相反的,shape[0]代表的是图像的高度shape[1]代表的是图像的宽度 

2.1、加权平均法

        对于彩色图像的每个像素,它会按照一定的权重去乘以每个通道的像素值,并将其相加,得到最后的值 就是灰度图像中对应位置的像素值。

        权重的比例为:

                R乘以0.299

                G乘以0.587

                B乘以 0.114

        这是经过大量实验得到的一个权重比例,也是一个比较常用的权重比例。

weight_red=0.299
weight_green=0.587
weight_blue=0.114
for i in range(1067):
    for j in range(800):
        img_gray[i][j]=round(img[i,j][0]*0.114+img[i,j][1]*0.578+img[i,j][2]*0.299)

2.2、均值法

        对于彩色图像的每个像素,它会将R、G、B三个通道的像素值全部加起来,然后再除以三,得到的平均 值就是灰度图像中对应位置的像素值

for i in range(1067):
    for j in range(800):
        img_gray[i][j]=(int(img[i,j][0])+int(img[i,j][1])+int(img[i,j][2]))//3

2.3、最大值法

        对于彩色图像的每个像素,它会从R、G、B三个通道的值中选出最大的一个,并将其作为灰度图像中对 应位置的像素值。

for i in range(1067):
    for j in range(800):
        img_gray[i][j]=max(img[i,j][0],img[i,j][1],img[i,j][2])

2.4、完整代码 

import cv2  
import numpy as np  

img = cv2.imread('light.jpg')  

# 获取图像的形状 (高, 宽, 通道数)  
img_shape = img.shape  

# 创建一个与输入图像高和宽相同的灰度图像,初始化为全零(黑色)  
img_gray = np.zeros((img_shape[0], img_shape[1]), np.uint8)  

# 定义 RGB 颜色通道的加权系数,用于灰度转换  
weight_red = 0.299  
weight_green = 0.587  
weight_blue = 0.114  

# 遍历图像的每一个像素  
# 假设图像的高度为 1067 和宽度为 800(请根据实际图像大小进行调整)  
for i in range(1067):  
    for j in range(800):  
        # 使用加权平均法将 RGB 转换为灰度值,并存储在灰度图像中  
        img_gray[i][j] = round(  
            img[i, j][0] * weight_blue +  # 蓝色通道  
            img[i, j][1] * weight_green + # 绿色通道  
            img[i, j][2] * weight_red      # 红色通道  
        )  

# 显示生成的灰度图像  
cv2.imshow('light', img_gray)  

# 等待用户按键后关闭窗口  
cv2.waitKey(0)  

三、opencv内置函数

        cvtColor

img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

四、库函数 

4.1、imread()

img = cv.imread(cv.samples.findFile(“starry_night.jpg”))

调用 cv::imread 函数会使用第一个参数指定的文件路径加载图像。第二个参数是可选的,它指定了我们想要图像的格式。这可能是:

  • IMREAD_COLOR 以 BGR 8 位格式加载图像。这是此处使用的默认值
  • IMREAD_UNCHANGED按原样加载图像(包括 Alpha 通道,如果存在)
  • IMREAD_GRAYSCALE 将图像加载为强度图像

注意

OpenCV 支持图像格式 Windows 位图 (bmp)、可移植图像格式 (pbm、pgm、ppm) 和 Sun 光栅 (sr, ras)。借助插件(如果您自己构建库,则需要指定使用它们,但在我们附带的软件包中默认存在),您还可以加载图像格式,如 JPEG(jpeg、jpg、jpe)、JPEG 2000(jp2 - 在 CMake 中代号为 Jasper)、TIFF 文件(tiff、tif)和便携式网络图形 (png)。此外,OpenEXR 也是一种可能性。

4.2、cvtColor()

COLOR_BGR2GRAY
Python:cv.COLOR_BGR2GRAY

在 RGB/BGR 和灰度之间转换,颜色转换

相关文章:

  • go 安装swagger
  • 【论文精读】Deformable DETR:用于端到端目标检测可变形 Transformer
  • go 加载yaml配置文件
  • 3-1 写分享报告
  • 鸿蒙编译框架插件HvigorPlugin接口的用法介绍
  • zuul路由转发功能的核心流程
  • 【docker系】docker安装数据迁移
  • 【含文档+PPT+源码】基于Django框架的乡村绿色农产品交易平台的设计与实现
  • 论文分享:PL-ALF框架实现无人机低纹理环境自主飞行
  • KICK第五课:Mac 系统下安装 Xcode 或 Clang
  • BGP路由聚合
  • 开发小运维-搭建rocketmq集群
  • OpenWebUI项目调研对比
  • Windows远程桌面黑屏怎么办?
  • 如何限制非法的WIFI连接操作以及网络端口使用?
  • 【每日学点HarmonyOS Next知识】状态栏字体、生命周期、自定义对话框屏幕中间、透明度、tab居中
  • 六十天前端强化训练之第十六天JSX语法深度解析与应用实践指南
  • 笔记:基于springboot+ShardingSphere-jdbc5.0.0的分库分表(偏yml配置)
  • 24.pocsuite3:开源的远程漏洞测试框架
  • X86 RouterOS 7.18 设置笔记六:端口映射(IPv4、IPv6)及回流问题
  • 听企业聊感受,《外企聊营商》5月13日起推出
  • 碧桂园:砸锅卖铁保交房、持续推进保主体,尽快让公司恢复正常经营
  • 构建菌株有效降解有机污染物,上海交大科研成果登上《自然》
  • 长期对组织隐瞒真实年龄,广元市城发集团原董事韩治成被双开
  • 重视体重管理,筑牢健康基石
  • 陕西永寿4岁女童被蜜蜂蜇伤致死,当地镇政府介入处理