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

[复制链接]
发表于 2025-10-17 02:54:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×


一、灰度图与彩色图区别

        灰度图与彩色图最大的差别就是:彩色图是由R、G、B 三个通道构成,而灰度图只有一个通道,也称为单通道图像,以是彩色图转成灰度图的过程本质上就是 将R、G、B三通道归并成一个通道的过程。
二、灰度化 


   读取图片 
  1. import cv2
  2. import numpy as np
  3. img=cv2.imread('light.jpg')
复制代码
  获取 图片高和宽
  1. img_shape=img.shape
复制代码
   使用numpy创建等宽高的画布
  1. 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
        这是颠末大量实行得到的一个权重比例,也是一个比力常用的权重比例。

  1. weight_red=0.299
  2. weight_green=0.587
  3. weight_blue=0.114
复制代码
  1. for i in range(1067):
  2.     for j in range(800):
  3.         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三个通道的像素值全部加起来,然后再除以三,得到的匀称 值就是灰度图像中对应位置的像素值

  1. for i in range(1067):
  2.     for j in range(800):
  3.         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三个通道的值中选出最大的一个,并将其作为灰度图像中对 应位置的像素值。

  1. for i in range(1067):
  2.     for j in range(800):
  3.         img_gray[i][j]=max(img[i,j][0],img[i,j][1],img[i,j][2])
复制代码
2.4、完备代码 

  1. import cv2  
  2. import numpy as np  
  3. img = cv2.imread('light.jpg')  
  4. # 获取图像的形状 (高, 宽, 通道数)  
  5. img_shape = img.shape  
  6. # 创建一个与输入图像高和宽相同的灰度图像,初始化为全零(黑色)  
  7. img_gray = np.zeros((img_shape[0], img_shape[1]), np.uint8)  
  8. # 定义 RGB 颜色通道的加权系数,用于灰度转换  
  9. weight_red = 0.299  
  10. weight_green = 0.587  
  11. weight_blue = 0.114  
  12. # 遍历图像的每一个像素  
  13. # 假设图像的高度为 1067 和宽度为 800(请根据实际图像大小进行调整)  
  14. for i in range(1067):  
  15.     for j in range(800):  
  16.         # 使用加权平均法将 RGB 转换为灰度值,并存储在灰度图像中  
  17.         img_gray[i][j] = round(  
  18.             img[i, j][0] * weight_blue +  # 蓝色通道  
  19.             img[i, j][1] * weight_green + # 绿色通道  
  20.             img[i, j][2] * weight_red      # 红色通道  
  21.         )  
  22. # 显示生成的灰度图像  
  23. cv2.imshow('light', img_gray)  
  24. # 等待用户按键后关闭窗口  
  25. cv2.waitKey(0)  
复制代码
三、opencv内置函数

        cvtColor

  1. img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
复制代码
四、库函数 

4.1、imread()

  1. 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 和灰度之间转换,颜色转换

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表