图像灰度化与图像加噪
1.图像灰度化。彩色图像中的每个像素的颜色有R,G,B三个分量决定,而每个分量的取值范围为0 ~ 255。而灰度图像是R,GB三个分量相同的一种特殊的彩色图像,算法有两种:
1)求每个像素点的R,G,B三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。
2)根据RGB和和YUY颜色控件的变化关系,建立亮度Y与R,G,B三个颜色分量的对应关系:Y = 0.3R + 0.59G + 0.11B,以这个亮度值表达图像的灰度值。
OpenCV有关的函数ctvColor,用它可直接完成灰度化操作。设img为源图像矩阵,myinmg1为灰度化的目标函数矩阵,编写代码如下:
#复制并且转换为灰度图像 myimg1 = cv2.ctvColor(img,cv2.COLOR_BGR2GRAY)
完整代码:
import cv2
import numpy as np
fn = '001.png'
if __name__ == '__main__':
img = cv2.imread(fn)
sp = img.shape
print(sp)
#获取图像的高height
sz1 = sp[0]
#宽width
sz2 = sp[1]
#显示图像大小
print('width: %d \nheight: %d'% (sz2, sz1))
#创建一个窗口并显示图像
cv2.namedWindow('img')
cv2.imshow('img', img)
#复制图像矩阵,生成与源图像一样的图像,并显示
myimg2 = img.copy()
cv2.imshow('myimg2', myimg2)
#复制并转换为灰度化图像,并显示
myimg1 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.namedWindow('myimg1')
cv2.imshow('myimg1',myimg1)
cv2.waitKey()
cv2.destroyAllWindows()
2.图像加噪。将图像若干个像素点的值设为噪声点的值。比如为图像加上很多像素值为[25,20,20]的像素点,例如:
for k in range(0,count):
xi = int(np.random.uniform(0,img.shape[1]))
xj = int(np.random.uniform(0,img.shape[0]))
if img.ndim == 2:
#灰度图像
img[xj,xi] = 255
elif img.ndim ==3:
#非灰度图像,图像加噪
img[xj.xi,0] = 25
img[xj,xi,1] = 20
img[xj,xi,2] = 20
完整代码:
import cv2
import numpy as np
fn = '001.png'
if __name__ == '__main__':
img = cv2.imread(fn)
#噪声点数
count = 100000
for k in range(0,count):
#获取图像噪声点数的随机位置
xi = int(np.random.uniform(0,img.shape[1]))
xj = int(np.random.uniform(0,img.shape[0]))
if img.ndim == 2:
# 灰度图像
img[xj, xi] = 255
elif img.ndim == 3:
# 非灰度图像,图像加噪
img[xj, xi, 0] = 25
img[xj, xi, 1] = 20
img[xj, xi, 2] = 20
cv2.namedWindow('img')
cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()
King@_@

浙公网安备 33010602011771号