• 图像处理入门一



    本文学习书籍为华为云的《从零到壹•Python图像处理及识别》,写博客的目的是为了记录自己的学习过程,其中会参考和借鉴其他博主的内容,如有侵权请及时联系我,我会及时删除;书本链接:https://bbs.huaweicloud.com/blogs/336932

    1.图像处理的基本知识

    图像都是由像素构成,像素表示为图像中的小方格,这些小方格都有一个明确的位置和被分配的色彩数值。
    图像通常分为二值图像、灰度图像和彩色图像,如下图所示;二值图像非黑即白(白色像素为255,黑色像素为0)。灰度图像是指每个像素的信息由一个量化的灰度级来描述的图像,没有彩色信息。彩色图像是 RGB 图像,RGB 表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道(彩色图可以看作三维的矩阵)。
    在这里插入图片描述

    2.OpenCV入门详解

    使用OpenCV要安装相关的包,在控制台输(pip install opencv-python),下面将介绍 OpenCV 中常见的数据类型,包括点 Point类、颜色 Scalar 类、尺寸 Size 类、矩形 Rect 类、矩阵 Mat 类。
    (1)点Point(表示二维坐标系中的点,含X和Y)

    point_list=[(110,110),(130,160)] #一个列表两个点
    
    • 1

    (2)颜色(包含四个元素的数组,设置像素值 RGB 三通道,第四个参数可忽略)

    (3)尺寸Size(它和 Point 相似,主要成员包括 height 和 width)

    width,height=img.shape
    
    • 1

    (4)矩阵Rect【Rect 类称为矩形类,包含 Point类的成员 x 和 y(代表矩形左上角的坐标)和 Size 类的成员 width 和 height(代表矩形的大小)】

    #OpenCV 示例
    Rect rect = rect1 & rect2; #求两矩形交集
    Rect rect = rect1 | rect2; #求两矩形并集
    Rect rectShift = rect + point; #矩形平移
    Rect rect = rect1 + size; #矩形缩放
    #Python 示例
    cv2.rectangle(img, (20,20), (150,250), (255,0,0), 2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (5)矩阵Mat(通用的矩阵类,用来创建和操作多维矩阵)

    #OpenCV 示例
    Mat M(3,2, CV_8UC3, Scalar(0,0,255));
    #Python 示例
    np.zeros((256,256,3), np.uint8)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    图像的读取等操作-使用cv2

    import cv2
    #读取图片
    img=cv2.imread("apple.jpg")
    #显示图片
    cv2.imshow("demo",img) #demo为显示图片是的名称
    #等待显示
    cv2.waitKey(0)
    cv2.destoryAllWindows()
    #无限期等待输入
    k=cv2.waitKey(0)
    #如果输入Esc按键退出
    if k==27:
    	cv2.destoryAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    图像的展示等操作-借助NumPy/Matplotlib

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    #读取图像
    img1=cv2.imread("lena.png")
    img1=cv2.cvtColor(img1,cv2.COLOR_BGR@RGB)#原彩展示
    img2=cv2.imread("people.png")
    img2=cv2.cvtColor(img2,cv2.COLOR_BGR@RGB)
    img3=cv2.imread("flower.jpg")
    img3=cv2.cvtColor(img3,cv2.COLOR_BGR@RGB)
    img4=cv2.imread("huawei.png")
    img4=cv2.cvtColor(img4,cv2.COLOR_BGR@RGB)
    #展示四张图
    #plt.subplot(2,2)表示生成 2×2 张子图
    titles=['lena','people','flower','huawei']
    images=[img1,img2,img3,img4]
    for i in range(4):
    	plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
    	plt.title(titles[i])
    	plt.xticks([]),plt.yticks([])
    plt.show()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述
    OpenCV像素处理
    OpenCV 中读取图像的像素值可以直接通过遍历图像的位置实现,如果是灰度图像则返回其灰度值,如果是彩色图像则返回蓝色(B)、绿色(G)、红色(G)三个分量值。

    img=cv2.imread("lena.png")
    #读取像素
    test=img[88,142]
    #修改像素
    img[88,142]=[255,255,255]
    #分别获取BGR通道像素
    blue=img[88,142,0]
    green=img[88,142,1]
    red=img[88,142,2]
    #将 100 到 200 行、150 到 250 列的像素区域设置为白色255的效果
    img[100:200,150:250]=[255,255,255]
    cv2.imshow('demo',img)
    #等待展示
    cv2.waitKey(0)
    cv2.destoryAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述
    NumPy像素处理(NumPy 是 Python 提供的数值计算扩展包,拥有高效的处理函数和数值编程工具,Array 是 NumPy 库中最基础的数据结构,表示数组

    #NumPy 读取像素调用 item()函数实现,在numpy下图片是一个二维数组
    img=cv2.imread('lena.png')
    print(type(img))
    #Numpy读取像素
    print(img.item(78,100,0)
    print(img.item(78,100,1)
    print(img.item(78,100,2)
    #Numpy修改像素
    img.itemset((78,100,0),100)
    img.itemset((78,100,1),100)
    img.itemset((78,100,2),100)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    OpenCV创建图像(需要numpy库函数实现)
    如下述代码,调用 np.zeros()函数创建空图像,
    创建的新图像使用 Numpy 数组的属性来表示图像的尺寸和通道信息,其中参数 img.shape 表示原始图像的形状,np.uint8 表示类型。

    img=cv2.imread('lena.png')
    #创建空图像,默认0全黑
    emptyImage=np.zeros(img.shape,np.uint8)
    #img.shape 为(500, 300, 3),它表示 500×300 像素的图像,3 表示这是一个 RGB 图像
    #显示图像
    cv2.imshow=np.zeros(img.shape,np.unit8)
    #等待显示
    cv2.waitKey(0)
    cv2.destoryAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    OpenCV复制图像

    #复制原有图像来获取一幅新图像,可以调用 copy()函数实现
    #读取图像
    img=cv2.imread('lena.png')
    #创建空图像,默认0全黑
    emptyImage=np.zeros(img.shape,np.uint8)
    #复制图像
    emptyImage2 = img.copy()
    #显示图像
    cv2.imshow("Demo1", img)
    cv2.imshow("Demo2", emptyImage)
    cv2.imshow("Demo3", emptyImage2)
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    OpenCV保存图像
    retval = imwrite(filename, img[, params])

    • filename 表示要保存的路径及文件名
    • img 表示图像矩阵
    • params 表示特定格式保存的参数编码,默认值为空。对于 JPEG 图片,该参数(cv2.IMWRITE_JPEG_QUALITY)表示图像的质量,用 0-100 的整数表示,默认值为 95。对于 PNG 图片,该参数
      (cv2.IMWRITE_PNG_COMPRESSION)表示的是压缩级别,从 0 到 9,压缩级别越高,图像尺寸越小,默认级别为 3。对于 PPM、PGM 、 PBM 图 片 , 该 参 数 表 示 一 个 二 进 制 格 式 的 标 志
      (cv2.IMWRITE_PXM_BINARY)。注意,该类型为 Long,必须转换成 int。
    import cv2
    import numpy as np
    img=cv2.imread('lena.png')
    #显示图片
    cv2.imshow('demo',img)
    #保存图片jpg/png参数
    cv2.imwrite('det1.jpg',img,[int(cv2.IMWRITE_JPEG_QUALITY),5])
    cv2.imwrite("dst2.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100]) 
    cv2.imwrite("dst3.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0]) 
    cv2.imwrite("dst4.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
    #等待显示
    cv2.waitKey(0)
    cv2.destoryAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

  • 相关阅读:
    基于 dynamic-datasource 实现 DB 多数据源及事物控制、读写分离、负载均衡解决方案
    页面中间显示提示信息,当滚动时消失
    java语言数据结构
    1. 爬虫之Beautifulsoup解析库&在线解析图片验证码
    navicat远程连接数据库遇到的问题 10060 unknown error
    【Leetcode】1320. Minimum Distance to Type a Word Using Two Fingers
    DFS 深度优先搜索 —— 一种探险的算法
    【前端面试题】01—42道常见的HTML5面试题
    问题解决 - Druid的Spring监控不生效(aop-patterns设置了Spring监控依然不生效)
    【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例实践应用
  • 原文地址:https://blog.csdn.net/come_closer/article/details/127162673