图像灰度化与图像加噪

  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()

  

 

posted @ 2020-03-13 15:12  King~~~  阅读(835)  评论(0)    收藏  举报