最近自己在做图像的预处理,学习了一些东西,做一个简单的小总结。
图像灰度化处理一般有以下几种方式:
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) # 读取指定位置的彩色图像
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow("img", gray) # 显示图片
cv.waitKey(0) # 等待键盘触发事件,释放窗口
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)
# 最大值法
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)
# 平均值法
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)
# 加权平均法
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)