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,代表是永远,等待用户操作
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) #打印图像的高度,宽度,通道数(, , )3个方向
print(image.size) #打印图像的大小625632==>**
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,代表是永远,等待用户操作
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() #这句话打开摄像头捕获图像 opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头
while True:
ret,frame = capture.read() #ret frame:视频中的每一帧
frame = cv.flip(frame,) #将视频帧左右调换,回正,镜像调换
cv.imshow("video",frame) #将视频中每一帧显示出来
c = cv.waitKey() #50毫秒关闭当前捕获的图像,显示下一个
# print(c) #c是用户响应的按键
if c == : #27是ESC键的ASCII码值
break def get_image_info(image):
print(type(image)) #<class 'numpy.ndarray'> numpy类型数组
print(image.shape) #打印图像的高度,宽度,通道数(, , )3个方向
print(image.size) #打印图像的大小625632==>**
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,代表是永远,等待用户操作
cv.destroyAllWindows() #销毁所有窗口
OpenCV---图像加载与保存的更多相关文章
- OpenCV图像加载与保存
OpenCV中的图像加载与保存 头文件是包含的库,在GitHub上下载的 imread("图片路径",图片加载方式) 图片加载方式: IMREAD_GRAYSCALE 灰度图像 I ...
- python实现图像加载与保存,窗口创建与销毁,图片常用属性,ROI,通道的分离与合并,对比度和亮度
目录: (一)图像加载与保存 (二)图像显示窗口创建与销毁 (三)图片的常用属性的获取 (四)生成指定大小的矩形区域(ROI) (五)图片颜色通道的分离与合并 (六)两张图片相加,改变对比度和亮度 ( ...
- 1、OpenCV Python 图像加载和保存
__author__ = "WSX" import cv2 as cv # 这里的文件是图片或者视频 def Save_File( image ): cv.imwrite(&quo ...
- 跟我一起学opencv 第一课之图像加载,修改,保存
使用opencv前记得引入库和头文件: #include<opencv2\opencv.hpp> 1.加载图像(cv::imread)(OPENCV 支持 JPG,PNG,TIFF等常见格 ...
- 【OpenCV学习笔记之一】图像加载,修改及保存
加载图像(用cv::imread)imread功能是加载图像文件成为一个Mat对象 其中第一个参数表示图像文件名称第二个参数 表示加载的图像是什么类型 支持常见的三个参数值IMREAD_UNCHANG ...
- opencv 加载 修改 保存 图像
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; /* 1 加载图像 cv::imre ...
- openCV - 1. 加载、修改、保存图像
加载 cv::imread 修改 cv::cvtColor 保存 cv::imwrite 加载图像cv::imread imread功能是加载图像文件成为一个Mat对象,其中第一个参数表示图像文件名称 ...
- KnockoutJS 3.X API 第七章 其他技术(1) 加载和保存JSON数据
Knockout允许您实现复杂的客户端交互性,但几乎所有Web应用程序还需要与服务器交换数据,或至少将本地存储的数据序列化. 最方便的交换或存储数据的方式是JSON格式 - 大多数Ajax应用程序今天 ...
- Qt Load and Save PCL/PLY 加载和保存点云
Qt可以跟VTK和PCL等其他库联合使用,十分强大,下面的代码展示了如何使用Qt联合PCL库来加载和保存PCL/PLY格式的点云: 通过按钮加载点云: void QMainWindow::on_pb_ ...
- 6.Knockout.Js(加载或保存JSON数据)
前言 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多数的Ajax应用程 ...
随机推荐
- java 不同数据类型的相互转化
在工作中经常会遇到需要将数据类型转化的情况,今天抽出时间总结一下. date——string Date date = new Date(); DateFormat dateformat = new S ...
- Scrum立会报告+燃尽图(Beta阶段第二周第一次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2409 项目地址:https://coding.net/u/wuyy694 ...
- Beta周王者荣耀交流协会第六次会议
1.立会照片 成员王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐. master:袁玥 2. 时间跨度 2017年11月15日 19:00 — 19:10 ,总计10分钟. 3. 地点 一食堂 ...
- 使用ssh公钥登陆
记录一下使用的具体命令,具体参考: Centos设置禁止密码登录而只使用密钥登录SSH方法 优先参考这个. ssh使用公钥授权不通过的问题解决 Xshell配置ssh免密码登录-密钥公钥(Publi ...
- 把握曝光三要素(上):快门、光圈、ISO
概要: 如果你还没有掌握快门.光圈和ISO,那这篇文章或许对你有所帮助! 把照片比作水池.把进光量比作水.把快门比作关闭水龙头的速度.把光圈比作水龙头的大小.把感光度ISO比作水龙头的滤网,这就变得好 ...
- 手机uc不支持伪元素使用animation动画;移动端background-attachment:fixed不兼容性
20170503 1.手机uc不支持伪元素使用animation动画 (暂未解决) 2.移动端background-attachment:fixed不兼容性,没有任何效果, element:befor ...
- SQL中 ALL 和 ANY 区别的
在select中我们可能会认为all和any应该表达的意思差不多.其实他们的意思完全不一样: all: 是将后面的内容看成一个整体,如: >all (select age from studen ...
- Struts按着配置文件的加载的顺序,后面文件和前面文件相同的配置,后面的会把前面的文件的值覆盖
Struts按着配置文件的加载的顺序,后面文件和前面文件相同的配置,后面的会把前面的文件的值覆盖
- 迁移数据到历史表SQL(转)
有时工作需要需要把当前表的数据,移到历史表中,而历史表基本是以时间(年)为后缀来命名历史表的,如 A_2011,A_2012,在移数据时,要按数据的时间,移到不同的表中,且由于如果数据有同步.一次处理 ...
- 【刷题】BZOJ 4196 [Noi2015]软件包管理器
Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...