zoukankan      html  css  js  c++  java
  • OpenCV图像处理学习笔记-Day1

    OpenCV图像处理学习笔记-Day1

    第1课:图像读入、显示和保存

    1. 读入图像

    retval = cv2.imread(文件名[,显示控制参数])
    文件名:完整文件名
    参数:
    	cv2.IMREAD_UNCHANGED
        cv2.IMREAD_GRAYSCALE
        cv2.IMREAD_COLOR
    

    2. 显示图像

    None = cv2.imshow(窗口名, 图像名)
    范例:
    	cv2.imshow('demo', image)
        
    retval = cv2.waitKey(	[,delay])
    delay:
        delay > 0	等待delay毫秒
        delay < 0	等待键盘单击
        delay = 0	无线等待
        
    cv2.destroyAllWindows()  # 销毁所有窗口
    

    3. 保存图像

    retval = cv2.imwrite(文件地址, 文件名)
    范例:
        cv2.imwrite('./image/A.jpg')
    

    第2课:图像处理入门基础

    1. 基本概念

    图像是由像素构成的

    图像分类:

    1. 二值图像
    2. 灰度图像
    3. RGB图像

    二值图像的像素点只能是0,1

    灰度图像的像素点是0-255,0为纯黑,255为纯白,区间内都是灰色

    RGB图像(3通道,在OpenCV为BGR)

    RGB图像的构成可以理解为三个灰度图像拼成一个RGB图像。

    2. RGB转灰度

    在实际项目中,通常需要将原始图像处理为灰度图像。为什么这么做呢?原始的彩色图像其一个像素点有三个值处理数据较为麻烦。而灰度图像每个像素点就只有一个值处理起来较为简单。转为灰度图像是否会丢失图像信息?不会!在转换过程中采取的算法采用加权操作,确保RGB三个颜色都保存在灰度图像中。

    第3课:像素处理

    1. 读取像素

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

    # 灰度图像,返回灰度值
    范例:
        p = img[88, 142]
        print(p)
        
    # BGR图像,返回B,G,R的值
    范例:
        blue = img[78, 125, 0]
        print(blue)
        
        green = img[78, 125, 1]
        print(green)
        
        red = img[78, 125, 2]
        print(red)
        
        p = img[78, 125]
        print(p)   # B, G, R
    

    2. 修改像素

    # 灰度图像(numpy数组操作)
    范例:
        print(img[88, 99])
        img[88, 99] = 255
        print(img[88, 99])
    

    第4课:使用numpy进行像素操作

    1. 读取像素

    返回值 = 图像.item(位置参数)
    灰度图像,返回灰度值。
    BGR图像,返回值为BGR的值
    范例:
        p = img.item(78, 125)
        print(p)
        
      	blue = img.item(78, 125, 0)
        green = img.item(78, 125, 1)
        red = img.item(78, 125, 2)
    

    2. 修改像素

    灰度图像
    范例:
        img.itemset((88, 99), 255)
        print(img.item(88, 99))
        img.itemset((88, 99), 255)
        print(img.item(88, 99))
        
    BGR图像
    范例:
        img.itemset((88, 99, 0), 255)
        img.itemset((88, 99, 1), 255)
        img.itemset((88, 99, 2), 255)
        
    

    第5课:获取图像属性

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

    3. 获取图像类型

    dtype返回的是图像的数据类型
    范例:
        import cv2
        img = cv2.imread('图像名称')
        print(img.dtype)  # uint8
    

    第6课:图像ROI

    1. ROI(region of interest),感兴趣区域

    import cv2
    img = cv2.imread('图像名称')
    face = img[200:400, 200:400]
    
    import cv2
    img = cv2.imread('图像名称')
    face = img[200:400, 200:400]
    img[200:400, 600:800] = face
    
    
    image-20200928133639473

    image-20200928134307279

    image-20200928134342014

    image-20200928134411357

    第7课:通道的拆分与合并

    1. 拆分通道

    import cv2
    img = cv2.imread('image_dir')
    b = img[:, :, 0]
    g = img[:, :, 1]
    r = img[:, :, 2]
    
    import cv2
    img = cv2.imread('image_dir')
    b, g, r = img.split(img)  # 拆分通道
    cv2.imshow('B', b)
    cv2.imshow('G', g)
    cv2.imshow('R', r)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    2. 合并通道

    import cv2
    img = cv2.imread('image_dir')
    b, g, r = cv2.split(a)
    m = cv2.merge([b, g, r])  # 合并通道
    cv2.imshow('merge', m)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    注意:拆分的顺序与合并的顺序一定要相同,否则图片将要不正确

    import cv2
    img = cv2.imread('image_dir')
    b, g, r = cv2.split(img)
    bgr = cv2.merge([b, g, r])
    rgb = cv2.merge([r, g, b])  # 产生错误图片
    cv2.imshow('bgr', bgr)
    cv2.imshow('rgb', rgb)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    image-20200928135559068

    image-20200928140055414

    image-20200928140120563

    image-20200928140205187

    第8课:图像加法

    1. numpy加法

    image-20200928153928937

    image-20200928153942923

    2. OpenCV加法

    image-20200928154020615

    image-20200928154034443

    注意的问题

    参与运算的图像大小、类型必须一致

    3. 代码实例

    import cv2
    
    
    img = cv2.imread('image_dir')
    img_ = img
    result1 = img + img_
    result2 = cv2.add(img, img_)
    
    cv2.imshow('original', img)
    cv2.imshow('result1', result1)
    cv2.imshow('result2', result2)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

    第9课:图像融合

    • 将2张或2张以上的图像信息的融合到1张图像上
    • 融合的图像含有更多的信息、能够更方便人来观察或者计算机处理

    1. 介绍

    image-20200928155156463

    图像加法

    结果图像 = 图像1 + 图像2

    img = img1 + img2

    图像融合

    结果图像 = 图像1 * 系数1 + 图像2 * 系数2 + 亮度调节量

    img = img1 * 0.3 + img2 * 0.7 + 18

    image-20200928155459698

    image-20200928155523562

    2. 代码实现

    import cv2
    
    
    img1 = cv2.imread('image_dir')
    img2 = cv2.imread('image_dir')
    
    result = cv2.addWeighted(img1, 1, img2, 1, 0)
    cv2.imshow('img1', img1)
    cv2.imshow('img2', img2)
    cv2.imshow('result', result)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    第10课:类型转换

    OpenCV提供了200多种不同的类型转换。

    cv2.COLOR_BGR2GRAY

    cv2.COLOR_BGR2RGB

    cv2.COLOR_GRAY2BGR

    import cv2
    
    
    img = cv2.imread('image_dir')
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # BGR转灰度图
    img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # BGR图像转RGB图像
    
    
    cv2.imshow('lenaColor', img)
    cv2.imshow('lenaGray', img_gray)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    第11课:图像缩放

    1. 图像缩放-resize函数

    语法格式

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

    src:原始图像

    dsize:缩放大小

    b = cv2.resize(a, (122, 122))
    

    fx, fy:缩放大小

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

    注意dsize; fx, fy设置一个即可

    import cv2
    
    
    img = cv2.imread('image_dir')
    rows, cols = img.shape[:2]
    img_resized = cv2.resize(img, (200, 100))  # (col, row), (宽, 高)
    # cv2.resize(img, (round(cols*0.5), round(rows*1.2)))
    
    # cv2.resize(img, None, fx=1.2, fy=0.5)  # (row, col), (高, 宽)
    
    cv2.imshow('original', img)
    cv2.imshow('resized', img_resized)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    第12课:图像翻转

    1. 图像翻转-flip函数

    语法

    dst = cv2.flip(src, flipCode)

    范例:

    dst = cv2.flip(src, 1)

    cv2.flip(a, 0)

    image-20200928223945950

    image-20200928224023654

    image-20200928224059610

  • 相关阅读:
    flex 连接mysql
    正确配置调试world wind on vs2008
    FLex调用servlet连接数据库
    c# 连接mysql并webservice数据
    ADF连接SOM
    转载加收藏关于OPENGL配置VS2008
    flex不能显示本地发布的地图
    Symbian专区
    asp.net控件开发基础學習
    控制网页大小
  • 原文地址:https://www.cnblogs.com/xunjishu/p/13747381.html
Copyright © 2011-2022 走看看