OpenCV-python图像处理(包含OpenCV库安装)

OpenCV-python图像处理(包含OpenCV库安装)

1.灰度直方图
2.原图
3.灰度图
4.反转图像
5.二值化图像
6.边缘检测
7.均值迁移模糊
8.双边滤波

可正常运行,需要安装对应的库。安装如下:(在虚拟环境中或终端)
OpenCV安装,使用清华镜像源:

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/

OpenCV-python图像处理(包含OpenCV库安装)_第1张图片matplotlib安装,使用清华镜像源:

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple/

OpenCV-python图像处理(包含OpenCV库安装)_第2张图片

纯代码,无名词概念解释。需要的自行百度。
(测试时版本:python:3.10,cv2:4.7.0,matplotlib:3.7.1)

import cv2
from matplotlib import pyplot as plt
import matplotlib

def image_processing(image_input):
    # cv2.normalize(image_input, image_input, 0, 255, cv2.NORM_MINMAX)  # 将图片的值进行范围调整,使用的放缩方式是 min_max 的方式
    #cv2.convertScaleAbs(image_input, image_input)         #图像增强

    image_H = cv2.cvtColor(image_input, cv2.COLOR_BGR2GRAY)         #将图像转为灰度图

    image_F = cv2.bitwise_not(image_input)          #图像反转,黑变白,白变黑

    threshold, image_B = cv2.threshold(image_H, 0, 255, cv2.THRESH_OTSU)          #输出阈值和二值化图像
    '''
    自行设置阈值:(通过修改第2,3个参数)
        THRESH_BINARY	超过阈值的值为最大值,其他值是0。THRESH_BINARY_INV	超过阈值的值为0,其他值为最大值。
        THRESH_TRUNC	超过阈值的值等于阈值,其他值不变。THRESH_TOZERO	超过阈值的值不变,其他值为0。
        THRESH_TOZERO_INV	超过阈值的值为0,其他值不变。
    自动获取阈值:
        THRESH_OTSU:适用于双波峰。
        THRESH_TRIANGLE:适用于单波峰。
        '''

    image_C = cv2.Canny(image_H, 0, 256, L2gradient=True)         #边缘检测
    '''
    image:要进行边缘检测的输入图像(单通道)。
    threshold1:第一个阈值,用于边缘检测中的滞后阈值。
    threshold2:第二个阈值,用于边缘检测中的滞后阈值。
    edges:可选,用于存储边缘检测的结果。
    apertureSize:可选,Sobel算子的大小。
    L2gradient:可选,True:使用L2范数运算,False:使用L1范数运算。
    '''
    image_M = cv2.pyrMeanShiftFiltering(image_input, 15, 50, 1,  termcrit=(cv2.TERM_CRITERIA_MAX_ITER+cv2.TERM_CRITERIA_EPS, 5, 1))         #均值迁移模糊
    '''
    src:输入图像,8位,三通道的彩色图像,不要求必须是RGB格式。
    sp:漂移物理空间半径大小。
    sr:漂移色彩空间半径大小。
    maxLevel:可选,金字塔的最大层数。
    termcrit:可选,迭代终止条件,迭代次数满足终止,迭代目标与中心点偏差满足终止,或者两者的结合,由最后两位参数确定。
    '''

    image_S = cv2.bilateralFilter(image_input, 0, 10, 50)         #双边滤波
    '''
    src:输入图像,单通道或三通道。
    d:邻域的直径,如果是小于等于 0,则由 sigmaSpace 计算得到。
    sigmaColor:颜色空间滤波器的标准差。值越大表示邻域中更多的颜色被混合。
    sigmaSpace:空域滤波器的标准差。更大的值代表更大范围内的像素(颜色相近)会被相互影响。
当 d 大于 0 的时候,sigmaSpace 被忽略,否则 d 由 sigmaSpace 计算得到。
    borderType:外延模式。
'''

    image = cv2.cvtColor(image_input, cv2.COLOR_BGR2RGB)
    image_H = cv2.cvtColor(image_H, cv2.COLOR_BGR2RGB)          # cv2 读取的是 [B,G,R] ,转化成顺序为 [R,G,B] 的格式
    image_B = cv2.cvtColor(image_B, cv2.COLOR_BGR2RGB)
    image_C = cv2.cvtColor(image_C, cv2.COLOR_BGR2RGB)
    image_M = cv2.cvtColor(image_M, cv2.COLOR_BGR2RGB)
    image_S = cv2.cvtColor(image_S, cv2.COLOR_BGR2RGB)

    return image, image_H, image_F, image_B, image_C, image_M, image_S


if __name__ == "__main__":
    plt.rcParams['font.sans-serif'] = ['SimHei']            #用来显示中文,若无此字体可自行下载或将标签改为英文     plt.title('峰值图')
    # plt.rcParams['axes.unicode_minus'] = False           # 用来显示负号

    image = cv2.imread("可莉.png")         #图片地址,相对路径即可。
    image_New = image_processing(image)

    '''显示图像'''
    plt.subplot(4, 2,1)
    plt.hist(image.ravel(), 256)
    plt.axis('on')          #坐标轴
    plt.title('灰度直方图')            #标签

    plt.subplot(4, 2, 2)
    plt.imshow(image_New[0])
    plt.axis('off')
    plt.title('原图')

    plt.subplot(4, 2, 3)
    plt.imshow(image_New[1])
    plt.axis('off')
    plt.title('灰度图')

    plt.subplot(4, 2, 4)
    plt.imshow(image_New[2])
    plt.axis('off')
    plt.title('反转图像')

    plt.subplot(4, 2, 5)
    plt.imshow(image_New[3])
    plt.axis('off')
    plt.title('二值化图像')

    plt.subplot(4, 2, 6)
    plt.imshow(image_New[4])
    plt.axis('off')
    plt.title('边缘检测')

    plt.subplot(4, 2, 7)
    plt.imshow(image_New[5])
    plt.axis('off')
    plt.title('均值迁移模糊')

    plt.subplot(4, 2, 8)
    plt.imshow(image_New[6])
    plt.axis('off')
    plt.title('双边滤波')

    plt.tight_layout()          #自动调整子图间距
    plt.show()



OpenCV-python图像处理(包含OpenCV库安装)_第3张图片

新手上路,望批评指正,一起讨论。

你可能感兴趣的:(图像识别,opencv,python,图像处理)