• OpenCV 基础图像处理


    1、生成图像

    cv2.imread是OpenCV库中的一个函数,用于读取图像文件。它接受一个参数,即要读取的图像文件的路径,返回一个多维数组,
    表示图像的像素值。该函数的常用参数包括:
    
        'flags':指定读取图像的方式,包括cv2.IMREAD_COLOR(读取彩色图像),cv2.IMREAD_GRAYSCALE(读取灰度图像)等。
        'encoding':指定图像的编码方式,默认为None。
        'decoder':指定解码器,默认为None。
    

     

    1. import cv2
    2. image = cv2.imread('images/lena.png')
    3. # imread函数读取了图像文件,并将其数据存储在变量'image'中
    4. print(image)
    5. # 打印的结果是一个多维数组,表示图像的像素值

    2、显示图像

    cv2.waitKey()是OpenCV库中的一个函数,用于等待用户按键。
    它接受一个参数,表示等待的时间(以毫秒为单位),如果没有按键按下,则返回-1。
    如果参数为0,则无限期等待用户按键。

     

    1. import cv2
    2. image = cv2.imread('images/lena.png')
    3. # 读取图像文件,并将其数据存储在变量'image'中
    4. cv2.imshow('lena', image)
    5. # 创建一个名为'lena'的窗口,并在该窗口中显示我们刚刚读取的图像
    6. cv2.waitKey(0)
    7. # 无限期地等待用户按键。参数0表示无限期等待。
    8. cv2.destroyWindow('lena')
    9. # 关闭名为'lena'的窗口

    3、保存图像

    cv2.imwrite(filename, img[, params])
    
    
        filename:要写入的文件名,包括文件路径和文件扩展名。
        img:要写入的图像数据,可以是单通道灰度图像,也可以是三通道彩色图像。
        params:可选参数,包括一些写入图像的质量、压缩比等参数,如[int(IMWRITE_JPEG_QUALITY), int(IMWRITE_PNG_COMPRESSION)]。

     

    1. import cv2
    2. # 读取图像
    3. img = cv2.imread('images/lena.png')
    4. # 写入图像
    5. # 将变量'img'中的图像数据写入到名为'result.bmp'的文件中
    6. result = cv2.imwrite('result.bmp', img)

    4、读取视频

    cv2.VideoCapture是OpenCV库中的一个函数,用于读取视频文件或摄像头的视频流。
    它的主要作用是从本地或网络中读取视频帧,并将其预存储到内存中,以便进行后续的图片处理或特征提取等操作。

     

    1. import cv2
    2. video = cv2.VideoCapture('images/video.mp4')
    3. # 创建VideoCapture对象 这个对象可以读取视频文件,这里读取的是位于'images/video.mp4'路径的视频文件
    4. fps = video.get(cv2.CAP_PROP_FPS)
    5. # 读取视频的帧速率 帧率是指每秒显示的帧数
    6. height = video.get(cv2.CAP_PROP_FRAME_HEIGHT)
    7. # 获取视频的高度
    8. weight = video.get(cv2.CAP_PROP_FRAME_WIDTH)
    9. # 获取视频的宽度
    10. print('FPS:', fps)
    11. # 打印视频的帧率
    12. print('The video size: ', height, weight)
    13. # 打印视频的大小,即其帧的高度和宽度

    FPS: 24.12565445026178
    The video size:  860.0 540.0

    5、读取并播放视频

    1. import cv2
    2. video = cv2.VideoCapture('images/video.mp4')
    3. # "创建一个VideoCapture对象,用于读取视频文件
    4. while video.isOpened():
    5. # 当视频文件成功打开时,进入循环。
    6. ret, frame = video.read()
    7. # 使用read方法读取视频的一帧,ret为布尔值,表示是否读取成功,frame为读取到的一帧
    8. cv2.imshow('video', frame)
    9. # 使用imshow方法显示视频,窗口的名称为'video',显示的内容为frame
    10. key = cv2.waitKey(30)
    11. # 等待30毫秒,看用户是否有键盘输入
    12. # 按ESC键退出
    13. if key == 27:
    14. break
    15. # 如果用户输入的是ESC键(ASCII值为27),则退出循环
    16. video.release()
    17. # 释放VideoCapture对象
    18. cv2.destroyAllWindows()
    19. # 关闭所有的OpenCV窗口

    6、查看图像属性

    1. import cv2
    2. imageColor = cv2.imread('images/lena.png')
    3. print('图像的大小和通道数:', imageColor.shape)
    4. # 在OpenCV中,一个彩色图像的形状是(高度, 宽度, 颜色通道),而颜色通道通常为3(RGB)
    5. print('图像总的像素个数:', imageColor.size)
    6. # 可以通过.size属性得到图像的总像素数
    7. print('图像的数据类型:', imageColor.dtype)
    8. # 图像的数据类型通常是'uint8',表示每个像素值的范围是0-255

    图像的大小和通道数: (256, 256, 3)
    图像总的像素个数: 196608
    图像的数据类型: uint8

    7、生成灰色图像

    生成一个256x256的黑色图像,所有像素的值都被设置为0
    np.zeros([256, 256], dtype=np.uint8)

     

    1. import cv2
    2. gray = np.random.randint(0, 256, size=[256, 256], dtype=np.uint8)
    3. # 使用numpy的random.randint函数创建了一个256x256的二维数组,
    4. # 数组中的每个值都是0到255之间的随机整数,数据类型为无符号8位整数(uint8)。
    5. # 这个数组代表一张灰度图像,其中每个值表示一个像素的灰度值。
    6. cv2.imshow('gray-image', gray)
    7. # 用imshow函数显示上面创建的灰度图像。'gray-image'是窗口的名称,gray是要显示的图像
    8. cv2.waitKey(0)
    9. cv2.destroyAllWindows()

    8、转换灰度图像

    1. import cv2
    2. imageColor = cv2.imread('images/lena.png')
    3. # imread函数读取了一个图像文件,文件路径是'images/lena.png',并将其保存到变量imageColor中。
    4. # 这个函数会将图像读取为彩色图像,除非另外指定。
    5. cv2.imshow('color', imageColor)
    1. imageGrey = cv2.imread('images/lena.png', 0)
    2. # 0是cv2.IMREAD_GRAYSCALE的别名,表示将图像读取为灰度图像
    3. cv2.imshow('grey', imageGrey)
    1. imageGrey2 = cv2.imread('images/lena.png', cv2.IMREAD_REDUCED_GRAYSCALE_2)
    2. # cv2.IMREAD_REDUCED_GRAYSCALE_2表示将图像读取为灰度图像,并将颜色深度降低到2
    3. cv2.imshow('grey2', imageGrey2)
    1. img = cv2.imread('images/lena.png', cv2.IMREAD_REDUCED_COLOR_4)
    2. # cv2.IMREAD_REDUCED_COLOR_4表示将图像读取为彩色图像,并将颜色深度降低到4
    3. cv2.imshow('color2', img)
    1. cv2.waitKey(0)
    2. cv2.destroyAllWindows()

    9、通道拆分

    1. """读取一张图像,并分离出它的红、绿、蓝三个颜色通道"""
    2. import cv2
    3. image = cv2.imread('images/lena.png')
    4. # 将图像的三个颜色通道(蓝、绿、红)分离出来。
    5. # 在OpenCV中,图像的颜色通道顺序是BGR
    6. b = image[:, :, 0]
    7. g = image[:, :, 1]
    8. r = image[:, :, 2]
    9. # 使用imshow函数分别显示蓝、绿、红三个颜色通道。
    10. cv2.imshow('B channel', b)
    11. cv2.imshow('G channel', g)
    12. cv2.imshow('R channel', r)
    13. cv2.waitKey(0)
    14. cv2.destroyAllWindows()

    1. import cv2
    2. image = cv2.imread('images/lena.png')
    3. # 将图像分离成三个颜色通道,分别对应蓝色(B)、绿色(G)和红色(R)
    4. b, g, r = cv2.split(image)
    5. cv2.imshow('B channel', b)
    6. cv2.imshow('G channel', g)
    7. cv2.imshow('R channel', r)
    8. cv2.waitKey(0)
    9. cv2.destroyAllWindows()

    10、通道合并

    1. import cv2
    2. image = cv2.imread('images/lena.png')
    3. b, g, r = cv2.split(image)
    4. # 分割成三个通道,分别是蓝色通道(b)、绿色通道(g)和红色通道(r)
    5. imageRGB = cv2.merge([r, g, b])
    6. # 红色、绿色和蓝色通道按照RGB顺序合并成一个新的图像
    7. imageGRB = cv2.merge([g, r, b])
    8. # 绿色、红色和蓝色通道按照GRB顺序合并成一个新的图像
    9. cv2.imshow('image', image)
    10. # 显示原始图像
    11. cv2.imshow('imageRGB', imageRGB)
    12. # 显示RGB顺序的图像
    13. cv2.imshow('imageGRB', imageGRB)
    14. # 显示GRB顺序的图像
    15. cv2.waitKey(0)
    16. cv2.destroyAllWindows()

  • 相关阅读:
    Android JNI HIDL 简单实例学习
    C# 给Word每一页设置不同文字水印
    淘宝/天猫获得淘宝商品评论 API 返回值说明
    Centos添加管理员账户
    Docker - 私有云、数据卷、网络
    GSAP动画
    用 Pytorch 训练一个 Transformer模型
    为 VitePress 网站添加 RSS 订阅支持
    【Vue】VUE模板vue-admin-template-4.4.0添加角色权限路由
    QT6.6 android下fftw-3.3.10库编译及调用so库方法
  • 原文地址:https://blog.csdn.net/m0_74261473/article/details/133291819