• python-opencv 培训课程笔记(1)


    python-opencv 培训课程笔记(1)

    博主参加了一次opencv库的培训课程,把课程所学整理成笔记,供大家学习,第一次课程包括如下内容:

    1.读取图像

    2.保存图像

    3.使用opencv库显示图像

    4.读取图像为灰度图像

    5.读取视频或者摄像头

    6.颜色通道的拆分和合并

    7.边界填充

    8.图像大小修改操作(resize)

    9.数值计算

    下面我们就开始内容介绍:
    首先需要先导入相关库:

    import os
    import cv2
    import  matplotlib.pyplot as plt
    import numpy as np
    
    • 1
    • 2
    • 3
    • 4

    第二步设置我们的文件读取路径,和文件保存路径:

    path=r'D:\learn\photo\cv\cat.jpg'
    path_dog=r'D:\learn\photo\cv\dog.jpg'
    path2=r'D:\learn\photo\cv\cat_save.jpg'
    
    • 1
    • 2
    • 3

    1.读取图像

    
    # imread(path,way)
    #way=0 灰度图。way=1 彩图
    img=cv2.imread(path)
    img_dog=cv2.imread(path_dog)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    imread默认读取彩图,如果后面加一个参数0,那么读取的就是灰度图。

    2.保存图像

    cv2.imwrite(path2,img_gray)
    
    • 1

    3.使用opencv库显示图像

    
    
    def cv_show(name,img):
        cv2.imshow(name,img)
        #cv2.waitKey(0),接收0,表示窗口暂停
        cv2.waitKey(0)
        #销毁所有窗口
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    cv_show('cat',img)
    
    • 1

    显示如下:
    在这里插入图片描述

    4.读取图像为灰度图像

    
    img_gray=cv2.imread(path,0)
    
    cv_show('gray_cat',img_gray)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    5.读取视频或者摄像头

    path_video=r'D:\learn\photo\cv\test.mp4'
    vc=cv2.VideoCapture(0)#启用摄像头
    vc=cv2.VideoCapture(path_video)#读取视频
    
    
    
    
    
    if vc.isOpened():
        ret,frame=vc.read()
    
    else :
        ret=False
    
    while ret:
        if ret :
            img_c=cv2.cvtColor(frame,1)#进行通道转换
            cv2.imshow('video',img_c)
               # cv_show('video',frame)
            if cv2.waitKey(100) & 0xFF==27:
                break
        ret,frame=vc.read()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    6.颜色通道的拆分和合并

    def img_rgb_split(img):
    
    
        r,g,b=cv2.split(img)
        print(r.shape)
        return r,g,b
    
    #颜色通道的合并
    
    def img_rgb_merge(r,g,b):
    
       img=cv2.merge(r,g,b)
       return img
    
    r,g,b=img_rgb_split(img)
    
    cv_show('r_cat',r)
    cv_show('g_cat',g)
    cv_show('b_cat',b)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    在这里插入图片描述

    7.边界填充

    
    top_size,bottom_size,left_size,right_size=(50,50,50,50)
    #复制法,复制最边缘像素 
    replicate=cv2.copyMakeBorder(
        img,
        top_size,bottom_size,left_size,right_size,
        borderType=cv2.BORDER_REFLECT
    
    
        )
    #反射法,在图像中指定像素的两边进行反射复制,
    replicate101=cv2.copyMakeBorder(
        img,
        top_size,bottom_size,left_size,right_size,
        borderType=cv2.BORDER_REFLECT101
    
    
        )
    #反射法,#以最边缘像素为轴
    replicate_101=cv2.copyMakeBorder(
        img,
        top_size,bottom_size,left_size,right_size,
        borderType=cv2.BORDER_REFLECT_101
    
    
        )
    #包装法
    wrap=cv2.copyMakeBorder(
        img,
        top_size,bottom_size,left_size,right_size,
        borderType=cv2.BORDER_WRAP
    
        )
    
    #常量法
    constrant=cv2.copyMakeBorder(
        img,
        top_size,bottom_size,left_size,right_size,
        borderType=cv2.BORDER_CONSTANT,
        value=0
    
        )
    
    plt.subplot(231)
    plt.imshow(img)
    plt.title('img')
    
    plt.subplot(232)
    plt.imshow(replicate)
    plt.title('REFLECT')
    plt.subplot(233)
    plt.imshow(replicate101)
    plt.title('REFLECT101')
    plt.subplot(234)
    plt.imshow(replicate_101)
    plt.title('REFLECT_101')
    plt.subplot(235)
    plt.imshow(wrap)
    plt.title('wrap')
    plt.subplot(236)
    plt.imshow(constrant)
    plt.title('constrant')
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    在这里插入图片描述

    8.图像大小修改操作(resize)

    img_dog=cv2.resize(img_dog,(500, 414))
    
    
    • 1
    • 2

    9.数值计算

    
    img_cat=img+10
    plt.subplot(231)
    plt.imshow(img)
    plt.title('cat')
    
    plt.subplot(232)
    plt.imshow(img_cat)
    plt.title('cat+10')
    
    img_cat_dog=img+img_dog
    
    plt.subplot(233)
    plt.imshow(img_cat_dog)
    plt.title('cat+dog')
    plt.subplot(234)
    plt.imshow(img_dog)
    plt.title('dog')
    
    img_weight=cv2.addWeighted(img,0.4,img_dog,0.6,0)
    plt.subplot(235)
    plt.imshow(img_weight)
    plt.title('cat+dog_wight')
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    结果如下:
    在这里插入图片描述

  • 相关阅读:
    OpenCV Hough变换-直线检测
    CISSP通关学习笔记:共计 9 个章节(已完结)
    Rafy 框架:领域控制器
    ELK 企业级日志分析系统 ELFK
    正版软件 | R-Drive Image:数据安全守护者,您的智能备份专家
    通过这些API,开发者可以在自己的应用程序中嵌入电商功能,为用户提供便捷的购物体验
    require、loadfile、dofile、load、loadstring
    linux网络编程
    求二叉树中指定节点所在的层数(可运行)
    React进阶之路(一)-- JSX基础、组件基础
  • 原文地址:https://blog.csdn.net/weixin_43327597/article/details/134496978