1. 实验1 图像的基本操作


1.1. 学习目标

  1. 掌握图像的读取和保存方法
  2. 能够使用OpenCV在图像上绘制几何图形
  3. 能够访问图像的像素
  4. 能够获取图像的属性,并进行通道的分离和合并
  5. 能够实现颜色空间的变换

1.2. 实验内容

1.2.1. 图像的IO操作

  • 显示图像、保存图像

    import numpy as np
    import cv2 as cv
    # 以灰度图的形式读取图像
    img = cv.imread('messi5.jpg',0)
    
    # opencv中显示
    cv.imshow('image',img)
    cv.waitKey(0)
    # matplotlib中展示
    plt.imshow(img[:,:,::-1])
    
  • 保存图像

    cv.imwrite('messigray.png',img)
    

1.2.2. 绘制几何图形

  • 绘制直线

    cv.line(img,start,end,color,thickness)
    

    参数:

    • img:要绘制直线的图像
    • Start,end: 直线的起点和终点
    • color: 线条的颜色
    • Thickness: 线条宽度
  • 绘制圆形

    cv.circle(img,centerpoint, r, color, thickness)
    

    参数:

    • img:要绘制圆形的图像
    • Centerpoint, r: 圆心和半径
    • color: 线条的颜色
    • Thickness: 线条宽度,为-1时生成闭合图案并填充颜色
  • 绘制矩形

    cv.rectangle(img,leftupper,rightdown,color,thickness)
    

    参数:

    • img:要绘制矩形的图像
    • Leftupper, rightdown: 矩形的左上角和右下角坐标
    • color: 线条的颜色
    • Thickness: 线条宽度

1.2.3. 在图像中添加文字

cv.putText(img,text,station, font,fontsize,color,thickness,cv.LINE_AA)

参数:

  • img: 图像
  • text:要写入的文本数据
  • station:文本的放置位置
  • font:字体
  • Fontsize :字体大小

1.2.4. 获取并修改图像中的像素点

可以通过行和列的坐标值获取该像素点的像素值。对于BGR图像,它返回一个蓝,绿,红值的数组。对于灰度图像,仅返回相应的强度值。使用相同的方法对像素值进行修改。

import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg')
# 获取某个像素点的值
px = img[100,100]
# 仅获取蓝色通道的强度值
blue = img[100,100,0]
# 修改某个位置的像素值
img[100,100] = [255,255,255]

1.2.5. 获取图像的属性

图像属性包括行数,列数和通道数,图像数据类型,像素数等。

属性 API
形状 img.shape
图像大小 img.size
数据类型 img.dtype

1.2.6. 图像通道的拆分与合并

有时需要在B,G,R通道图像上单独工作。在这种情况下,需要将BGR图像分割为单个通道。或者在其他情况下,可能需要将这些单独的通道合并到BGR图像。你可以通过以下方式完成。

# 通道拆分
b,g,r = cv.split(img)
# 通道合并
img = cv.merge((b,g,r))

1.2.7. 色彩空间的改变

OpenCV中有150多种颜色空间转换方法。最广泛使用的转换方法有两种,BGR↔Gray和BGR↔HSV

cv.cvtColor(input_image,flag)

参数:

  • input_image: 进行颜色空间转换的图像
  • flag: 转换类型
    • cv.COLOR_BGR2GRAY : BGR↔Gray
    • cv.COLOR_BGR2HSV: BGR→HSV

1.3. 实验步骤

按照以上实验内容,对images文件夹的图像进行以下,并截图和记录实验结果

  • 读取图像
  • 在图像上绘制圆形和正方形
  • 在图像上写上自己的学号和姓名
  • 打印出图像的属性,包括图像大小、图像像素类型
  • 将图像进行拆分为3个不同通道的单通道图像,并对其中一个通道的灰度图像进行如下操作
    • 改变图像中(50~100,50~100)位置的像素点的灰度值
  • 合并以上分解的图像
  • 将最终的截图保存。
Copyright © ZHOUWEN all right reserved,powered by GitbookLatest updated: 2022-04-09 13:09:33

results matching ""

    No results matching ""