• 图像处理


    一、图像读入、显示和保存

    1.读入图像

    retval = cv2.imread(文件名[, 显示控制参数])

    显示控制参数参数如下:

    cv2.IMREAD_UNCHANGED

    cv2.IMREAD_GRAYSCALE

    cv2.IMREAD_COLOR

    ……

    2.显示图像

    None = cv2.imshow(窗口名, 图像名)

    例如:

    cv2.imshpw("demo", image)

    等待命令:

    retval = cv2.waitKey([, delay])

    delay:

    delay>0 等待delay毫秒

    delay<0 等待键盘单击

    delay=0 无限等待

    删除所有窗口:

    cv2.destroyAllWindows()

    3.保存图像

    cv2.imwrite(文件地址, 文件名)

    二、图像处理入门基础

    opencv中,彩色图像的通道顺序和通常的图像描述不同,使用的顺序是:B、G、R。

    图像转换:

    彩色图像转换成灰度图像;

    灰度图像转换为二值图像等。

    三、像素处理

    1.读取像素

    返回值 = 图像(位置参数)

    对于灰度图:

    p = img[10, 100]

    对于RGB图像:

    blue = img[10, 100, 0], green = img[10, 100, 1], red = img[10, 100, 2]

    2.修改像素值

    像素 = 新值

    例如:

    对于灰度图像:

    img[10, 100] = 255

    对于RGB图像:

    img[10, 100] = [255, 255, 255]

    四、numpy访问像素

    1.读取像素

    返回值 = 图像.item(位置参数)

    对于灰度图像:

    p = img.item(10, 100)

    对于RGB图像:

    blue = img.item(10, 100, 0), green = img.item(10, 100, 1), red = img.item(10, 100, 2) 或者 三通道数组 p = img.item(10, 100)

    2.修改像素值

    图像名.itemset(位置, 新值)

    对于灰度图像:

    p = img.itemset((10, 100), 255)

    对于RGB图像:

    img.itemset((10, 100, 0), 255), img.itemset((10, 100, 10), 255),  img.itemset((10, 100, 2), 255) 

    五、获取图像属性

    1.形状:行、列、通道;

    shape可以获取图像的形状,返回包含行数、列数、通道数的元组。

    例如:

    import cv2

    img1 = cv2.imread('灰度图像文件名')

    print(img1.shape)

    # (512, 512)

    或者:

    import cv2

    img2 = cv2.imread('彩色图像文件名')

    print(img2.shape)

    # (512, 512, 3)

    2.像素数目;

    size可以获取图像的像素数目。

    灰度图像 返回:行数×列数

    彩色图像 返回:行数×列数×通道数

    例如:

    import cv2

    img = cv2.imread('图像文件名')

    print(img.size)

    # 786432

    3.图像的数据类型;

    dtype返回的数图像的数据类型

    例如:

    import cv2

    img = cv2.imread('图像文件名')

    print(img.dtype)

    # uint8

    六、图像ROI

    图像感兴趣区域。

    import cv2

    img = cv2.imread('图像名')

    face = img[200:400, 200:400]

    七、通道拆分和合并

    1.拆分通道

    import cv2

    img = cv2.imread('图像名')

    b, g, r = cv2.split(img)

    2.合并通道

    import cv2

    img = cv2.imread('图像名')

    b, g, r = cv2.split(img)

    m = cv2.merge([b, g, r])

    八、图像加法 

    1.numpy加法

    取模加法

    结果=图像1+图像2

    若:

    图像1+图像2<=255,结果=图像1+图像2;

    图像1+图像2>255,结果=(图像1+图像2)%255;

    2.opencv加法

    饱和运算

    结果=cv2.add(图像1, 图像2)

    若:

    图像1+图像2<=255,结果=图像1+图像2;

    图像1+图像2>255,结果=255;

    九、图像融合

    将2张或者2张以上的图像信息融合到1张图像上

    函数addWeighted

    例如:

    dst = cv2.addWeighted(src1, alpha, src2, bata, gamma)

    dst = src1 * alpha + src2 * beta +gamma

    注、亮度调节值gamma不能省略

    十、类型转换

    将图像由一种类型转换为另一种类型。

    opencv提供了200多种不同类型之间的转换。

    常用的如下:

    cv2.COLOR_BGR2GRAY

    cv2.COLOR_BGR2RGB

    cv2.COLOR_GRAY2BGR

    例如:

    import cv2

    a = cv2.imread('图像名')

    b = cv2.cvtColor(a, cv2.COLOR_BGR2GRAY)

    十一、图像缩放

    函数resize

    dst = cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

    其中,dsize和fx, fy设置一个即可。

    例如:

    b = cv2.resize(a, (122, 122))   元祖中第一个为列,第二个为行。

    b = cv2.resize(a, None, fx=0.5, fy=0.7)

    十二、图像翻转

    函数flip

    dst = cv2.flip(src, flipCode)

    其中,flipCode:

    flipCode=0,以X轴为对称轴翻转;

    flipCode>0,以Y轴为对称轴翻转;

    flipCode<0,以X轴、Y轴方向同时翻转。

    例如;

    dst = cv2.flip(src, 1)

    十三、基础理论——图像阈值1

    阈值分割

    如下图所示:

    二进制阈值化(Threshold Binary):先设定一个阈值,大于阈值的的像素点的灰度值设定为最大值(8位灰度值为255),灰度值小于阈值的像素点的灰度值设定为最小值。

    反二进制阈值化(Threshold Binary,Inverted):先设定一个阈值,大于阈值的的像素点的灰度值设定为最小值0,灰度值小于阈值的像素点的灰度值设定为最大值。

    截断阈值化(Truncate):先设定一个阈值,大于阈值的的像素点的灰度值设定该阈值,灰度值小于阈值的像素点的灰度值保持不变。

    反阈值化为0(Threshold to Zero,Inverted):先设定一个阈值,大于阈值的的像素点的灰度值设定为0,灰度值小于阈值的像素点的灰度值保持不变。

    阈值化为0(Threshold to Zero):先设定一个阈值,大于阈值的的像素点的灰度值保持不变,灰度值小于阈值的像素点的设置为0。

    十四、基础理论——图像阈值1

    Threshold函数及其实现

    retval, dst = cv2.threshod(src, thresh, maxval, type)

    retval:阈值

    dst:处理结果

    src:源图像

    threshold:阈值

    maxval:最大值

    type:类型

    其中,type可以有:

    cv2.THRESH_BINARY

    cv2.THRESH_BINARY_INV

    cv2.THRESH_TRUNC

    cv2.THRESH_TOZERO_INV

    cv2.THRESH_TOZERO

    十五、图像平滑——均值滤波

    均值滤波如图所示:

    函数blur

    处理结果=cv2.blur(原始图像,核大小)

    例如:

    src = cv2.imread(r"C:UsersAdministratorDesktopshoe.jpg", cv2.IMREAD_GRAYSCALE)
    dst = cv2.blur(src, ksize=(3, 3))
    cv2.imshow('src', src)
    cv2.imshow('dst', dst)
    cv2.waitKey(-1)

    十六、图像平滑——方框滤波

    函数:boxFilter

    处理结果=cv2.boxFilter(原始图像,目标图像深度,核大小,normalize属性)

    目标图像深度:int类型的目标图像深度。通常使用-1,表示与原始图像一致。

    normalize属性:是否对目标图像进行归一化处理。

    其中,

    即:

    当normalize=true时:

    与均值滤波相同。

    当normalize=false时:

    很容易发生溢出。

    十七、图像平滑——高斯滤波

    原理:

    对于二维图像而言,需要用到二维的高斯函数(中心为原点),其形式如下:

    假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:

    假定σ=1.5,则模糊半径为1的权重矩阵如下:

    这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵:

    中心点以及周边n个点,每个点乘以自己的权重值并将这些值相加,就是中心点的高斯模糊的值。对所有点重复这个过程,就得到了高斯模糊后的图像。
    如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。
    对于边界点来说,周边没有足够的点,一个变通方法是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。

    函数:GaussianBlur

    dst = cv2.GaussianBlur(src, ksize, sigmaX)

    ksize:核大小(N,N)必须是奇数

    sigmaX:X方向方差,控制权重

  • 相关阅读:
    git环境搭建、git详细使用教程、快速上手git
    数据一致性解决方案实践
    锁的使用
    数据库连接池优化
    多级缓存优化实践
    服务端调优与JVM调优
    Sentinel 流量防卫兵
    Spring Cloud Gateway微服务网关
    OpenFeign与负载均衡
    Nacos config原理
  • 原文地址:https://www.cnblogs.com/xjlearningAI/p/12899469.html
Copyright © 2020-2023  润新知