python+opencv系列教程(2)——图像加载与保存

  • A+
所属分类:大数据

1 代码

  1. # -*- coding=GBK -*-
  2. import cv2 as cv
  3. import numpy as np
  4. def video_demo():
  5.     # 打开视频文件:其实就是建立一个VideoCapture结构
  6.     # 如果是笔记本,0 打开的是自带的摄像头,1 打开外接的相机
  7.     capture = cv.VideoCapture(0)
  8.     while True:
  9.         ret, frame = capture.read()
  10.         cv.imshow("video", frame)
  11.         c = cv.waitKey(50)
  12.         if c == 27:  # 按下esc键退出
  13.             break
  14. # 输出图片属性
  15. def get_image_info(image):   # 定义一个函数来输出图片的一些属性
  16.     print(type(image))  # 显示图片类型 numpy类型的数组
  17.     # type()是python内置的函数。
  18.     # type()返回数据结构类型(list、dict、numpy.ndarray等)
  19.     print(image.shape)
  20.     # 图像矩阵的shape属性表示图像的大小,shape会返回tuple元组
  21.     # 第一个元素表示矩阵行数
  22.     # 第二个元组表示矩阵列数
  23.     # 第三个元素是3,表示像素值由光的三原色组成
  24.     print(image.size)  # 图像大小  shape的三个数值相乘
  25.     print(image.dtype)  # 图像数组中每个元素的数据类型
  26.     #  dtype返回数据元素的数据类型(int、float等)
  27.     pixel_data = np.array(image)
  28.     print(pixel_data[0][0])
  29. print("hello world")
  30. src = cv.imread("C:/Users/Admin/Desktop/1.jpg")  # 读取图像
  31. cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)  # 创建显示图像的窗口
  32. cv.imshow("input image", src)  # 显示图片到特定的窗口中
  33. get_image_info(src)
  34. video_demo()  # 打开摄像头
  35. cv.waitKey(0)  # 等待用户操作,0为一直等待,5000为等待用户操作5s
  36. gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
  37. cv.imwrite("C:/Users/Admin/Desktop/1.png", gray)
  38. cv.destroyAllWindows()  # 释放所有内存

2 讲解

# -*- coding=GBK -*-:当需要显示中文时,该代码可用于防止中文乱码

  2.1 读取图片

从print("hello world")开始,先调用opencv的imread方法,读取固定路径的jpg图片,加载到内存中,创建一个名为“input image”的窗口,如果窗口是用CV_WINDOW_AUTOSIZE(默认值)标志创建的,那么显示图像原始大小。否则,将图像进行缩放以适合窗口。调用imshow方法,将图片显示到名为“input image”的窗口中。

  2.2 获取图像信息

调用get_image_info函数,将图片内容作为参数传入,type函数返回该数据对应的数据类型,由于图片实际上是一个多维数组,所以打印为“numpy.ndarray”类型;shape返回图像的长宽和通道数,size是shape的三个数值的乘积;dtype其实返回的是数组中每个元素的数据类型;将数据转换成数组,pixel_data[0][0]表示(0,0)位置的像素值为rgb(165,145,150)

python+opencv系列教程(2)——图像加载与保存

  2.3 显示视频信息

调用video_demo方法,打开笔记本摄像头,一直循环显示摄像头中的图像,调用read方法返回的图像数据存储到frame中,输出显示到“video”窗口中,每次循环都会等待用户输入按键,50ms未输入则进入下一语句,如果用户按下esc,则退出循环

  2.4 保存图像

调用cvtColor将原始图像转换为灰度图,并保存到规定路径下,opencv根据文件的后缀名采用相应的压缩算法保存图片。

Qt大课堂-QtShare

发表评论

您必须登录才能发表评论!