opencv基础学习笔记--图像加载和保存

图像加载和保存

上次我们测试了搭建的开发环境,现在我们详细讲一下,怎么读取图片并显示出来以及图片的保存和摄像头的调用


1.什么是图像

计算机“看到”的图像其实是一个一个像素点构成的,每个像素点都有对应的数值。 所以图像时结构化存储的数据信息。

  • 图像属性:
    • 通道数目:一般的RGB图片,通道数目(channels) 是3个(红、绿、蓝);而monochrome图片,通道数目(channels)是1。
    • 高与宽:顾名思义,高度是图像竖向的长度, 宽度是图像横向的长度
    • 像素数据:就是图像每个像素点的值
    • 图像类型:图像在计算机显示的类型有二值图像、灰度图像、彩色图像(伪彩色图像和真彩色图像)

2.获取图像的详细信息

下面通过代码来获取图像的详细信息,包括图像的形状、类型、大小、数据类型和像素值。
下面是获取图像信息的函数:

def get_image_info(image):
    print("图像的类型:", type(image))
    print("图像的形状:", image.shape)
    print("图像的大小:", image.size)
    print("图像的数据类型:", image.dtype)
    pixel_data = np.array(image)
    print("图像的像素值:", pixel_data)

完整代码:

import cv2 as cv
import numpy as np


def get_image_info(image):
    print("图像的类型:", type(image))
    print("图像的形状:", image.shape)
    print("图像的大小:", image.size)
    print("图像的数据类型:", image.dtype)
    pixel_data = np.array(image)
    print("图像的像素值:", pixel_data)

print("----------hello python----------")
src = cv.imread("E:/image.jpg")  # 读取图像,注意使用自己图像的路径
get_image_info(src)  # 获取传入图像的详细信息
cv.waitKey(0)  # 等待键盘输入,目的是让程序停在这里不马上关闭
cv.destroyAllWindows()  # 销毁该程序下的所有窗口

下面是我测试得到的结果: opencv基础学习笔记--图像加载和保存_第1张图片

从运行的结果可以看出,这个图像的类型是numpy.ndarray,这是python中numpy库里面的多维数组, 图像形状是(613, 573, 3),说明图像的高度是613,宽度是573,通道数是3。图像的大小是1053747,这个数据是由之前的图像形状计算而来,6135733=1053747,由1053747个像素组成。图像的数据是uint8格式的,每个像素点所占的大小是无符号8位的。图像的像素值在图中可以看到是有许多0到255之间的数构成的三维数组。

3.获取摄像头的画面

摄像头代码:

def video_demo():
    capture = cv.VideoCapture(0)  # 打开摄像头设备,参数为0表示使用第一个设备,如果有多个设备可以修改参数,选择使用的设备
    while True:
        ret, frame = capture.read()  # ret表示返回的信息,frame表示视频中的每一帧
        frame = cv.flip(frame, 1)
        """
            翻转    0:沿X轴翻转(垂直翻转)   
                大于0:沿Y轴翻转(水平翻转)   
                小于0:先沿X轴翻转,再沿Y轴翻转,等价于旋转180°
        如果不加这一句代码,摄像头显示的画面是相反的,可以试一试效果
        """
        cv.imshow("video", frame)  # 使用一个窗口来显示摄像头的内容
        c = cv.waitKey(50)  # 等待50毫秒
        if c == 27:  # 27对应ASCII中的ESC,如果键盘输入ESC键,则会退出整个循环
            break

完整代码:

import cv2 as cv
import numpy as np


def video_demo():
    capture = cv.VideoCapture(0)  # 打开摄像头设备,参数为0表示使用第一个设备,如果有多个设备可以修改参数,选择使用的设备
    while True:
        ret, frame = capture.read()  # ret表示返回的信息,frame表示视频中的每一帧
        frame = cv.flip(frame, 1)
        """
            翻转    0:沿X轴翻转(垂直翻转)   
                大于0:沿Y轴翻转(水平翻转)   
                小于0:先沿X轴翻转,再沿Y轴翻转,等价于旋转180°
        如果不加这一句代码,摄像头显示的画面是相反的,可以试一试效果
        """
        cv.imshow("video", frame)  # 使用一个窗口来显示摄像头的内容
        c = cv.waitKey(50)  # 等待50毫秒
        if c == 27:  # 27对应ASCII中的ESC,如果键盘输入ESC键,则会退出整个循环
            break


print("----------hello python----------")
video_demo()
cv.waitKey(0)
cv.destroyAllWindows()

测试结果:

opencv基础学习笔记--图像加载和保存_第2张图片

可以按ESC键之后,按0键结束程序,或者直接点击pycharm中的红色停止按钮停止程序。

4.将读取的图片转换为灰色图片并保存图片

保存图片的操作很简单,只需几行代码

print("----------hello python----------")
src = cv.imread("E:/image.jpg")
cv.imshow("input image", src)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)  # 转化为灰色
cv.imwrite("E:/image1.jpg", gray)  # 保存图片
cv.waitKey(0)
cv.destroyAllWindows()

保存的图片在E盘的根目录下 效果如下: opencv基础学习笔记--图像加载和保存_第3张图片

转载于:https://my.oschina.net/u/3470937/blog/3030204

你可能感兴趣的:(opencv基础学习笔记--图像加载和保存)