ITKeyword,专注技术干货聚合推荐

注册 | 登录

图像基础、OpenCV入门3——图像灰度化、二值化与图像加噪

xundh 分享于 2017-07-20

推荐:opencv读取灰度图像像素代码

平台:wen7+vc++6.0+opencv1.0 读取灰度图像像素部分代码如下: //显示灰度图像像素 int iGR    = gray_image->height; int iGC     = gray_image->width; for(i

2020腾讯云共同战“疫”,助力复工(优惠前所未有!4核8G,5M带宽 1684元/3年),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1053

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

图像灰度化

方法1:求出每个像素点的RGB三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量
方法2:求RGB和YUV颜色空间的变化关系,建立亮度Y与RGB三个颜色分量的对应关系:Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值。OpenCV的cvtColor函数,可以直接完成灰度化操作。

#-*- 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位的灰度值图像直接进行处理,可以通过直方图、灰度变化及正交变化之类数学运算对图像做进一步处理,比如说图像识别等。如果有必要,可将图像二值化,这样有利于对图像进一步处理,使图像数据量减小,突显出感兴趣的目标的轮廓。

图像二值化

#-*- 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)  

这里写图片描述

图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。
一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化(Binarization)。

Python-OpenCV中提供了阈值(threshold)函数:
cv2.threshold()
函数:
1. src 指原图像,原图像应该是灰度图。
2. x 指用来对像素值进行分类的阈值。
3. y 指当像素值高于(有时是小于)阈值时应该被赋予的新的像素值
4. Methods 指不同的阈值方法,这些方法包括:

推荐:【OpenCV】数字图像灰度直方图

灰度直方图是数字图像中最简单且有用的工具,这一篇主要总结OpenCV中直方图CvHistogram的结构和应用。 灰度直方图的定义 灰度直方图是灰度级的函数,描述图像中

![这里写图片描述](http://img.blog.csdn.net/20170720082124883?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHVuZGg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)     

•cv2.THRESH_BINARY 图(1)
这里写图片描述
大于阈值的像素点的灰度值设定为最大值(如8位灰度值最大为255),灰度值小于阈值的像素点的灰度值设定为0。

•cv2.THRESH_BINARY_INV 图(2)
这里写图片描述
大于阈值的像素点的灰度值设定为0,而小于该阈值的设定为255。

•cv2.THRESH_TRUNC 图(3)
这里写图片描述
像素点的灰度值小于阈值不改变,大于阈值的灰度值的像素点就设定为该阈值。

•cv2.THRESH_TOZERO 图(4)
这里写图片描述
像素点的灰度值小于该阈值的不进行任何改变,而大于该阈值的部分,其灰度值全部变为0。

•cv2.THRESH_TOZERO_INV 图(5)
这里写图片描述
像素点的灰度值大于该阈值的不进行任何改变,像素点的灰度值小于该阈值的,其灰度值全部变为0。

参考:
http://blog.csdn.net/what_lei/article/details/49159655

图像加噪

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

这里写图片描述

推荐:利用Opencv进行图像灰度变换处理

1、利用 OpenCV 读取图像。 具体内容:用打开 OpenCV 打开图像,并在窗口中显示 2、灰度图像二值化处理 具体内容:设置并调整阈值对图像进行二值化处理。 3、灰

图像灰度化 方法1:求出每个像素点的RGB三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量 方法2:求RGB和YUV颜色空间的变化关系,建立亮度Y与RGB三个颜色分量的对应关系:Y=0.3R+0.

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。