1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 数字图像处理--彩色图像转灰度图像

数字图像处理--彩色图像转灰度图像

时间:2019-05-04 12:15:13

相关推荐

数字图像处理--彩色图像转灰度图像

我们日常的环境通常获得的是彩色图像,很多时候我们常常需要将彩色图像转换成灰度图像。也就是3个通道(RGB)转换成1个通道。

(1)平均法

最简单的方法当然就是平均法,将同一个像素位置3个通道RGB的值进行平均。

I(x,y)=1/3∗IR(x,y)+1/3∗IG(x,y)+1/3∗IB(x,y)I(x,y) = 1/3 * I_R(x,y) +1/3 * I_G(x,y)+ 1/3 * I_B(x,y) I(x,y)=1/3∗IR​(x,y)+1/3∗IG​(x,y)+1/3∗IB​(x,y)

原始图像:

import cv2import numpy as nplenna = cv2.imread("lenna.png")row, col, channel = lenna.shapelenna_gray = np.zeros((row, col))for r in range(row):for l in range(col):lenna_gray[r, l] = 1 / 3 * lenna[r, l, 0] + 1 / 3 * lenna[r, l, 1] + 1 / 3 * lenna[r, l, 2]cv2.imshow("lenna_gray", lenna_gray.astype("uint8"))cv2.waitKey()1234567891011

(2)最大最小平均法

取同一个像素位置的RGB中亮度最大的和最小的进行平均。

I(x,y)=0.5∗max(IR(x,y),IG(x,y),IB(x,y))+0.5∗min(IR(x,y),IG(x,y),IB(x,y))I(x,y) =0.5*max(I_R(x,y), I_G(x,y), I_B(x,y))+0.5*min(I_R(x,y), I_G(x,y), I_B(x,y)) I(x,y)=0.5∗max(IR​(x,y),IG​(x,y),IB​(x,y))+0.5∗min(IR​(x,y),IG​(x,y),IB​(x,y))

for r in range(row):for l in range(col):lenna_gray[r, l] = 1 / 2 * max(lenna[r, l, 0], lenna[r, l, 1], lenna[r, l, 2]) + 1 / 2 * min(lenna[r, l, 0],lenna[r, l, 1], lenna[r, l, 2])cv2.imshow("lenna_maxmin", lenna_gray.astype("uint8"))cv2.waitKey()123456789

(3)加权平均法

I(x,y)=0.3∗IR(x,y)+0.59∗IG(x,y)+0.11∗IB(x,y)I(x,y) = 0.3 * I_R(x,y) +0.59 * I_G(x,y)+ 0.11 * I_B(x,y) I(x,y)=0.3∗IR​(x,y)+0.59∗IG​(x,y)+0.11∗IB​(x,y)

这是最流行的方法。几个加权系数0.3,0.59,0.11是根据人的亮度感知系统调节出来的参数,是个广泛使用的标准化参数。

for r in range(row):for l in range(col):lenna_gray[r, l] = 0.11 * lenna[r, l, 0] + 0.59 * lenna[r, l, 1] + 0.3 * lenna[r, l, 2]cv2.imshow("lenna_weighted", lenna_gray.astype("uint8"))cv2.waitKey()123456

(4)二值图像

不严谨的时候,我们也可以把灰度图称为黑白图像,实际上除了灰度图,还有一种图像叫二值图,也就是灰度只有0和255,这才是“真正的黑白图像”,因为0代表黑色,255代表白色。我们设定一个阈值T,当某像素点的灰度值大于T时,设定该像素点的值为255,当小于T时,设定为0。

lenna_binary = np.zeros_like(lenna_gray)threshold = 100for r in range(row):for l in range(col):if lenna_gray[r, l] >= threshold:lenna_binary[r, l] = 255else:lenna_binary[r, l] = 0cv2.imshow("lenna_binary", lenna_binary.astype("uint8"))cv2.waitKey()1234567891011

(5)反转图像

反转图像也很简单:s = 255-r。反转图像特别适用于增强暗色图像中的白色或灰色细节。

x_ray = cv2.imread("x_ray.png", 0)row, col = x_ray.shapex_ray_inverse = np.zeros_like(x_ray)for r in range(row):for l in range(col):x_ray_inverse[r, l] = 255 - x_ray[r, l]cv2.imshow("x_ray", x_ray)cv2.imshow("x_ray_inverse", x_ray_inverse)cv2.waitKey()123456789101112

转载自:/saltriver/article/details/79677116

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。