opencv-python 图像灰度化

opencv-python 图像灰度化

  • 写在前面
  • 读取图像
  • cv库函数
  • 分量法
  • 最大值法
  • 平均值法
  • 加权平均法

写在前面

最近自己在做图像的预处理,学习了一些东西,做一个简单的小总结。
图像灰度化处理一般有以下几种方式:

1. 分量法

将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。
opencv-python 图像灰度化_第1张图片
  
 2. 最大值法

将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。
在这里插入图片描述

3. 平均值法

将彩色图像中的三分量亮度求平均得到一个灰度值。

在这里插入图片描述

4. 加权平均法

根据重要性及其它指标,将三个分量以不同的权值进行加权平均。R、G、B钱面系数即所加权值,可任意改变。
在这里插入图片描述

读取图像

记得导库

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = cv.imread("test.jpg", cv.IMREAD_COLOR)  # 读取指定位置的彩色图像

原图
opencv-python 图像灰度化_第2张图片

cv库函数

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow("img", gray)  # 显示图片
cv.waitKey(0)  # 等待键盘触发事件,释放窗口

效果图
opencv-python 图像灰度化_第3张图片

分量法

height, width, channel = img.shape

# 分量法
R = np.zeros(img.shape, np.uint8)
G = np.zeros(img.shape, np.uint8)
B = np.zeros(img.shape, np.uint8)
for i in range(height):
    for j in range(width):
        R[i, j] = img[i, j, 0]
        G[i, j] = img[i, j, 1]
        B[i, j] = img[i, j, 2]
# cv.imshow('R', R)
# cv.imshow('G', G)
# cv.imshow('B', B)

Ropencv-python 图像灰度化_第4张图片
Gopencv-python 图像灰度化_第5张图片
Bopencv-python 图像灰度化_第6张图片

最大值法

# 最大值法
grayimg1 = np.zeros(img.shape, np.uint8)
for i in range(height):
    for j in range(width):
        grayimg1[i, j] = max(img[i, j, 0], img[i, j, 1], img[i, j, 2])
# cv.imshow('srcimg1', grayimg1)

opencv-python 图像灰度化_第7张图片

平均值法

# 平均值法
grayimg2 = np.zeros(img.shape, np.uint8)
for i in range(height):
    for j in range(width):
        grayimg2[i, j] = 1 / 3 * img[i, j, 0] + 1 / 3 * img[i, j, 1] + 1 / 3 * img[i, j, 2]
# cv.imshow('srcimg2', grayimg2)

opencv-python 图像灰度化_第8张图片

加权平均法

# 加权平均法
grayimg3 = np.zeros(img.shape, np.uint8)
for i in range(height):
    for j in range(width):
        # 0.3 0.59 0.11 
        grayimg3[i, j] = 0.3 * img[i, j, 0] + 0.59 * img[i, j, 1] + 0.11 * img[i, j, 2]
# cv.imshow('srcimg3', grayimg3)

opencv-python 图像灰度化_第9张图片

你可能感兴趣的:(python,opencv)