2.opencv的图像灰度处理方法:

·        图像灰度化处理就是将一幅彩色图像转换为灰度化图像的过程。彩色图像通常包括R、G、B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色图像的R、G、B三个分量相等的过程。灰度图像中每个像素仅具有一种样本颜色,其灰度是位于黑色与白色之间的多级色彩深度,灰度值大的像素点比较亮,反之比较暗,像素值最大为255(表示白色),像素值最小为0(表示黑色)。

#-*- coding: utf-8 -*-
import cv2
import numpy as np

fn = "test1.jpg"
if __name__ == '__main__':
    print('loading %s' % fn)
    img = cv2.imread(fn)
    sp = img.shape
    print(sp)

    # 获取图像大小
    sz1 = sp[0]
    sz2 = sp[1]
    print('width:%d\nheight:%d' % (sz2,sz1))
    # 创建一个窗口显示图像
    cv2.namedWindow('img')
    cv2.imshow('img',img)
    # 复制图像矩阵,生成与源图像一样的图像,并显示
    myimg2 = img.copy();
    cv2.namedWindow('myimg2')
    cv2.imshow('myimg2',myimg2)

    # 复制并转换为灰度化图像并显示
    myimg1 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    cv2.namedWindow('myimg1')
    cv2.imshow('myimg1',myimg1)
    cv2.waitKey()
    cv2.destroyAllWindows()

        实际上RGB并不能反映图像的形态特征,只是从光学的原理蚝颜色的调配。把图像转换成8位的灰度值图像直接进行处理,可以通过直方图、灰度变化及正交变化之类数学运算对图像做进一步处理,比如说图像识别等。如果有必要,可将图像二值化,这样有利于对图像进一步处理,使图像数据量减小,突显出感兴趣的目标的轮廓。
        图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。
        一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化(Binarization)。

#-*- coding: utf-8 -*-
import cv2  
  
image = cv2.imread('test1.jpg')  
image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)  
cv2.threshold(image, 140, 255, 0, image)  
  
cv2.namedWindow("Image")  
cv2.imshow("Image", image)  
cv2.waitKey(0)

图像加噪

#-*- coding: utf-8 -*-
import cv2  
import numpy as np

img = cv2.imread('test1.jpg')  
# 噪声点数量
coutn = 100000
for k in range(0,coutn):
    # 获取图像噪声点的随机位置
    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()