OpenCV---图像加载与保存
一:获取图像的信息
什么是图像:
结构化存储的数据信息 图像属性: -通道数目 -高与宽 -像素数据 -位图深度
import cv2 as cv def get_image_info(image): print(type(image)) #<class 'numpy.ndarray'> numpy类型数组 print(image.shape) #打印图像的高度,宽度,通道数(608, 343, 3)3个方向 print(image.size) #打印图像的大小625632==>608*343*3 print(image.dtype) #dtype:每个像素点有3个通道,每个通道所占的位数:无符号的int8位uint8 src = cv.imread("./1.png") #读取图片 get_image_info(src) cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应 cv.imshow("input image",src) #通过名字将图像和窗口联系 cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作 cv.destroyAllWindows()
二:读取视频,打开摄像头
import cv2 as cv import numpy as np def video_demo(): capture = cv.VideoCapture(0) #这句话打开摄像头捕获图像 opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头 while True: ret,frame = capture.read() #ret frame:视频中的每一帧 frame = cv.flip(frame,1) #将视频帧左右调换,回正,镜像调换 cv.imshow("video",frame) #将视频中每一帧显示出来 c = cv.waitKey(50) #50毫秒关闭当前捕获的图像,显示下一个 # print(c) #c是用户响应的按键 if c == 27: #27是ESC键的ASCII码值 break def get_image_info(image): print(type(image)) #<class 'numpy.ndarray'> numpy类型数组 print(image.shape) #打印图像的高度,宽度,通道数(608, 343, 3)3个方向 print(image.size) #打印图像的大小625632==>608*343*3 print(image.dtype) #dtype:每个像素点有3个通道,每个通道所占的位数:无符号的int8位uint8 pixel_data = np.array(image) #获取了所有的像素数据 print(pixel_data) src = cv.imread("./1.png") #读取图片 get_image_info(src) cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应 cv.imshow("input image",src) #通过名字将图像和窗口联系 video_demo() #下面的waitKey就是等待图像和视频两个操作 cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作 cv.destroyAllWindows() #销毁所有窗口
补充:VideoCapture
VideoCapture打开视频流,视频文件,VideoCapture(0)--->0代表摄像头,若有多个摄像头,按照顺序0,1,2...
也可以打开视频文件,写入视频路径,然后循环read读取数据帧即可
读取视频内容,对每一帧图像进行处理,是要对内容进行分析,对象检测,对象追踪,等等。OpenCV读出来的视频都是没有声音的,而且视频不易过大
音视频的编码解码是MPEG
三:图像保存(修改属性)
import cv2 as cv import numpy as np def video_demo(): capture = cv.VideoCapture(0) #这句话打开摄像头捕获图像 opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头 while True: ret,frame = capture.read() #ret frame:视频中的每一帧 frame = cv.flip(frame,1) #将视频帧左右调换,回正,镜像调换 cv.imshow("video",frame) #将视频中每一帧显示出来 c = cv.waitKey(50) #50毫秒关闭当前捕获的图像,显示下一个 # print(c) #c是用户响应的按键 if c == 27: #27是ESC键的ASCII码值 break def get_image_info(image): print(type(image)) #<class 'numpy.ndarray'> numpy类型数组 print(image.shape) #打印图像的高度,宽度,通道数(608, 343, 3)3个方向 print(image.size) #打印图像的大小625632==>608*343*3 print(image.dtype) #dtype:每个像素点有3个通道,每个通道所占的位数:无符号的int8位uint8 pixel_data = np.array(image) #获取了所有的像素数据 print(pixel_data) src = cv.imread("./1.png") #读取图片 get_image_info(src) cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应 cv.imshow("input image",src) #通过名字将图像和窗口联系 # video_demo() #下面的waitKey就是等待图像和视频两个操作 gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY) #获取一张灰度图像 cv.imwrite("./save.png",gray) #图像保存,数据写入 cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作 cv.destroyAllWindows() #销毁所有窗口