- A+
所属分类:大数据
1 代码
- # -*- coding=GBK -*-
- import cv2 as cv
- import numpy as np
- def video_demo():
- # 打开视频文件:其实就是建立一个VideoCapture结构
- # 如果是笔记本,0 打开的是自带的摄像头,1 打开外接的相机
- capture = cv.VideoCapture(0)
- while True:
- ret, frame = capture.read()
- cv.imshow("video", frame)
- c = cv.waitKey(50)
- if c == 27: # 按下esc键退出
- break
- # 输出图片属性
- def get_image_info(image): # 定义一个函数来输出图片的一些属性
- print(type(image)) # 显示图片类型 numpy类型的数组
- # type()是python内置的函数。
- # type()返回数据结构类型(list、dict、numpy.ndarray等)
- print(image.shape)
- # 图像矩阵的shape属性表示图像的大小,shape会返回tuple元组
- # 第一个元素表示矩阵行数
- # 第二个元组表示矩阵列数
- # 第三个元素是3,表示像素值由光的三原色组成
- print(image.size) # 图像大小 shape的三个数值相乘
- print(image.dtype) # 图像数组中每个元素的数据类型
- # dtype返回数据元素的数据类型(int、float等)
- pixel_data = np.array(image)
- print(pixel_data[0][0])
- print("hello world")
- src = cv.imread("C:/Users/Admin/Desktop/1.jpg") # 读取图像
- cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) # 创建显示图像的窗口
- cv.imshow("input image", src) # 显示图片到特定的窗口中
- get_image_info(src)
- video_demo() # 打开摄像头
- cv.waitKey(0) # 等待用户操作,0为一直等待,5000为等待用户操作5s
- gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
- cv.imwrite("C:/Users/Admin/Desktop/1.png", gray)
- 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)
2.3 显示视频信息
调用video_demo方法,打开笔记本摄像头,一直循环显示摄像头中的图像,调用read方法返回的图像数据存储到frame中,输出显示到“video”窗口中,每次循环都会等待用户输入按键,50ms未输入则进入下一语句,如果用户按下esc,则退出循环
2.4 保存图像
调用cvtColor将原始图像转换为灰度图,并保存到规定路径下,opencv根据文件的后缀名采用相应的压缩算法保存图片。