OpenCV读取视频和图像序列

OpenCV+VS 读取、采集视频、切割为序列图像 VideoCapture读取视频 cv::VideoCapture capture(const string& filename); // 输入文件名 cv::VideoCapture capture(0); // 视频捕捉设备  将视频帧读取到cv::Mat矩阵中,有两种方式:一种是read()操作;另一种是 “>>”操作。 cv::Mat frame; c... 阅读详情

转自http://www.ylzx8.cn/duomeiti/image/1400105.html


OpenCV读取视频和图像序列

    在使用OpenCV时候,我们首先会做的是获取待处理的图像,这个图像可能来源于已存储的视频文件、也可能来源于实时的摄像头画面、或是某个文件夹下的一系列图片。或许你会觉得,这都是小菜一碟,因为我们学习OpenCV的第一步一般是学习如何加载和显示一幅图片。对于打开摄像头或是读取视频的程序,网上也是一抓一大把。如果你是初学者,不妨看一下我下面的总结,或许有你不曾注意到的。

      对于图像或视频的加载、显示、窗口设置、工具条、图像合并为视频、视频分割成图像、打开视频或摄像头等操作的定义是放在OpenCV的highGui模块中的,说到这,还是建议初学者尽量多看看opencv2refman.pdf这个文件,你会对opencv的结构更清晰。下面仅就图像和视频的读取和显示方面做探究。

1.读图像

OpenCV可以读取哪些格式的图片?如何读取?

在OpenCV中,对于单幅图像的读取,我们一般使用imread()函数,先看下面一段代码:

 

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Mat img;

	//img = imread("images//frame_0001.jpg");
	img = imread("images//frame_0001.jpg",0);

	if (img.empty())
	{
		cout<<"cannot load image"<<endl;
		return 0;
	}

	//namedWindow("image");

	imshow("image",img);
	waitKey(0);
	return 0;
}

 

对于使用红蓝颜色加亮的代码,你可以尝试一下,看看有什么不同?你会发现namedWindow("image");有没有这句都是一样的,而imread第二参数不同将显示出不同的图像,一个是原图,另一个是灰度图。为什么呢,我们不妨看一下imread()函数接口:

C++: Mat imread(conststring& filename, int flags=1 )

Parameters

                     filename – Name of file tobe loaded.

                     flags – Flags specifyingthe color type of a loaded image:

                     – >0 Return a 3-channelcolor image.

                     Note: In the currentimplementation the alpha channel, if any, is stripped from the

                     output image. Use negativevalue if you need the alpha channel.

                     – =0 Return a grayscaleimage.

                     – <0 Return the loadedimage as is (with alpha channel).</span>

 

可以看到filename中存放的是图片的名字,如果图片不在本项目文件下,必须给出图片的绝对路径。对于flags参数有三种取值,取值为0时输出为灰度图,取值大于0时输出值为三通道图像,如果你需要带有alpha通道的图像,则必须使用负值参数。
我们知道图片的封装格式有好多种,比如jpg,bmp,png,但OpenCV可以读取哪些呢?其实在不同的操作系统下使用OpenCV时,可以读取图像的种类还是有区别的。在opencv2refman.pdf这个文档中对这个还是有些介绍的:
The function imread loads an image from the specified file and returns it. If the image cannot be read (because
of missing file, improper permissions, unsupported or invalid format), the function returns an empty matrix
( Mat::data==NULL ). Currently, the following file formats are supported:
• Windows bitmaps - *.bmp, *.dib (always supported)
• JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section)
• JPEG 2000 files - *.jp2 (see the Notes section)
• Portable Network Graphics - *.png (see the Notes section)
• Portable image format - *.pbm, *.pgm, *.ppm (always supported)
• Sun rasters - *.sr, *.ras (always supported)
• TIFF files - *.tiff, *.tif (see the Notes section)
另外,在windows和linux下使用OpenCV读取图像时还是有一定区别的,不管格式还是OpenCV的配置,但这些内容会留在OpenCV移植相关章节中去详述。
2.读视频
OpenCV中有一个专门读取摄像头或者视频文件的类,叫VideoCapture,这个类的功能很强大,建议初学者参考opencv2refman.pdf来学习,我们先来看一段代码
 
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Mat img;
	VideoCapture cap(0);
	if (!cap.isOpened())
	{
		cout<<"cannot open camera"<<endl;
		return 0;
	}
	while (true)
	{
		cap >> img;
		imshow("image",img);
		waitKey(30);
	}
	return 0;
}


这是读取视频时最常用的方法,使用<<号称是最方便快捷的方法。
以上的的这些内容是你在OpenCV的开发手册上可以看到的,但有一些在实际开发中很常见的,而开发手册中却没有的,来看看吧:
 
3. 读取图片文件夹
我们从一些数据库中下载下来的测试数据,有些是视频文件,而有些是一帧帧的图片,比如下图中的这种情况:
 OpenCV读取视频跟图像序列
我该如何设计程序,才能方便的去让程序逐个读取这些图片文件呢?我们可能会首先排除VideoCapture类,我们认为他只能读取视频文件或者摄像头。我们一般会选择使用imread函数,只是我们必须在读取下一帧图片时更换filename参数,其实这样也不难,我们可以尝试将每个图片的文件名按顺序存放在一个文本文件中,然后可以从文本文件中逐个提取文件名。我们还可以将数字转化为字符串,再与frame_和,jpg结合在一块租出文件名,我第一次碰到这个问题时曾经尝试了很多方法,但一次在OpenCV的samples中我发现原来OpenCV可以使用VideoCapture类读取图像序列的。看下面一段代码:
 
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
	string first_file = "images//frame_%04d.jpg"; 
	VideoCapture sequence(first_file);

	if (!sequence.isOpened())
	{
		cerr << "Failed to open the image sequence!\n" << endl;
		return 1;
	}

	Mat image;
	namedWindow("Image sequence", 1);

	for(;;)
	{

		sequence >> image;

		if(image.empty())
		{
			cout << "End of Sequence" << endl;
			break;
		}

		imshow("Image sequence", image);
		waitKey(0);
	}

	return 0;
}


opencv中VideoCapture的使用——打开网络摄像头/图像序列 OpenCV中的VideoCapture不仅可以打开视频、usb摄像头,还可以做很多事,例如读取流媒体文件,网络摄像头,图像序列等。 OpenCV如何读取usb摄像头可以参考本人的另外一篇,地址如下:点击打开链接 。本文介绍如何读取网络摄像头、图像序列,并给出代码。 读取网络摄像头、图像序列,使用VideoCapture的另一个方法: C++: VideoCapture::VideoCa 阅读详情

相关推荐

将图片序列压缩成视频

有些时候,我们确实需要将一个图片序列压缩成视频文件,从而方便观看,或者给别人展示等。本文的目的就是提供一种解决方法。首先,需要安装opencv和xvid。前者是图像处理,计算机视觉领域的一个开源库(可以参考这里:http://blog.youkuaiyun.com/carson2005/article/details/6979806);后者是一种广泛应用的开源视频编解码器(这里有个简单的介绍:http://b

计算机视觉小菜鸟的专栏 8714

【OpenCV】读入数字图像基础操作学习笔记

读入数字图像: cv2.imread(所需读入的图像的完整路径(若图像在程序下的文件夹下也可直接输入图像名称),读入图像的形式) 读入图像的形式: cv2.IMREAD_CDLOR(也可写'1'):加载彩色图像,忽略透明度 cv2.IMREAD_GRAYSCALE(也可写'0'):以灰度模式加载图像. cv2.IMREAD_UNCHANGED(也可写'-1'):保留读取图片原来的颜色通道. 窗口中显示图像: cv2.imshow(窗口名称(字符串形式),图像对象(imread函数获得的对象))

m0_63235356的博客 3405

OpenCV入门(十七)快速学会OpenCV 16 视频处理

OpenCV的视频I/O模块提供了一组用于读写视频或图像序列的类和函数。该模块将cv::VideoCapture和cv::VideoWriter类作为一层接口面向用户,这两个类下面是很多不同种类的后端视频I/O API,有效地屏蔽了后端视频I/O的差异性,简化了用户层的编程。在OpenCV中,视频的读操作是通过VideoCapture类来完成的,视频的写操作是通过VideoWriter类来实现的。

小幽余生不加糖 1846

C++(opencv)读取图片序列及保存图片到指定文件夹

今天又心学到一个知识点 把它记下来 哈哈 for (int i = 1; i <= 图片数量; i++) { // sprintf读入指定路径下图片序列 sprintf_s(fileName, "D:\\VS2010\\Flow1\\Flow1\\%d.bmp", i); sprintf_s(windowName, "NO%d", i); // 按照图像文件名读取 f...

weixin_30639719的博客 1956

视频序列处理与OpenCV框架应用

本章节介绍了如何使用OpenCV处理视频序列,包括读取、处理以及写入视频帧。详细讲解了VideoCapture类和VideoWriter类的使用,以及如何通过回调函数或类接口实现视频帧的处理。还探讨了如何将处理后的视频帧保存为视频文件或图像序列。

weixin_35364187的博客 513

MaaS 商业模式全面分析报告:从技术赋能到商业变现的全链条探索

MaaS(模型即服务)商业模式正成为AI产业主流,2024年上半年中国市场规模达2.5亿元,预计2027年占比将提升至47%。该模式通过云服务提供预训练AI模型,大幅降低企业应用AI的技术门槛和成本。核心盈利方式包括按使用量计费、订阅制、定制化服务等,其中混合模式因灵活性成为趋势。MaaS产业链包含模型提供商、云平台、应用开发商和最终用户,重塑了AI产业格局。随着《数据法案》等监管加强,数据增值服务面临更严格合规要求。未来五年,中国MaaS市场增速预计超50%,用户规模将从2025年2.1亿增至2030年5

芯片行业20年 · 参与定义实现千万级量产出货 · AI芯片PM 2892

OpenCV学习笔记---- 挨个读取图像文件夹下的所有文件,进行样本训练

//编程环境:VS2008+OpenCV1.1,//本程序首先挨个读取F://my face database//OnlyFace文件夹下的所有图像文件,之后,在项目文件夹下//建立一个名为“result.xls”的Excel文件,对于每一个图像文件,在RGB颜色空间进行归一化处理,将每个//像素点的R,G,B分量的均值和方差输出到该excel文

一蓑烟雨的专栏 7196

Dify+MCP 双剑合璧:告别知识库模糊统计,让AI精准查询数据库数据!

本文详细介绍了如何通过Dify和MCP的结合,解决知识库在数据库查询中的模糊统计问题。通过MCP中间件将自然语言实时转换为SQL语句,实现精准数据查询,并支持SSE协议持续更新数据。文章包含MySQL环境搭建、MCP服务端部署、Dify工作流配置等实战步骤,帮助用户高效构建智能数据库查询系统。

weixin_33737774的博客 369

OpenCV/C/C++读取文件夹内所有图或者多张图片

因为我是用来OpenCV的类,但是无伤大雅,大家可以吧多余的删除文件夹图片以及按顺序命名,如1,2,3......./*函数功能:读取文件夹下指定数目的图片*/void ReadImage(int num){    float x = 1.0, y = 0.0, z = 0.0,tidu=0.0;    int m = 0;    Mat image;//    ofstream outf; //...

风中落泪的花 6155

Python RPA 流程自动化快速上手

Python RPA 流程自动化快速上手

看花容易绣花难 1万+

yakit 验证码识别 进行webfuzzer

在渗透测试的过程中,我们可能需要对管理员密码进行枚举,或者密码喷洒的时候,遇到验证码就很烦。有没有自动化识别验证码的办法呢?有的,兄弟,有的。验证码的识别率很低,captcha-killer-modified对算术验证码识别正确率非常低,还会识别成乱七八糟的结果,这就非常麻烦。因为你不知道到底是验证码不对,还是密码不对。这是 ddddocr 识别率的问题,如果师傅们找到准确度更高的工具,完全可以替换上去。

Arkmornings的博客 1666

Opencv基础 (二):使用OpenCV读取和写入视频

在OpenCV中读写视频与读写图像非常相似。视频就是一系列通常被称为帧的图像。所以,你需要做的就是循环播放视频序列中的所有帧,然后一次处理一帧。在这篇文章中,我们将演示如何从一个文件、一个图像序列和一个网络摄像头读取、显示和写入视频。我们还将研究流程中可能发生的一些错误,并帮助理解如何解决这些错误。 让我们先看一下读取视频文件的代码示例。它本质上包含了从磁盘读取视频并显示它的功能。随着您的深入,我们将详细讨论这个实现中使用的函数。 Python import cv2 # Create a video .

@bangbang的博客 6501

Python 爬虫实战:在房天下抓取房产信息,分析房价走势

通过本次 Python 爬虫实战,我们成功地从房天下爬取了房产信息,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分区域的房产数据,且未对房产的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多区域的房产数据,并深入分析房产的多媒体内容、用户行为模式等,为购房者和房地产从业者提供更有价值的数据支持。

u014481728的博客 1367

OpenCV入门(C++/Python)- 使用OpenCV读取和编写视频(二)

如果有要读取的帧,您可以使用imshow()在窗口中显示当前帧,否则退出循环。在这里下,通过指定3(CAP_PROP_FRAME_WIDTH)和4(CAP_PROP_FRAME_HEIGHT)来检索帧宽度和高度。在下面的示例中,我们提供了数字值5和7,它们对应于帧速(CAP_PROP_FPS)和帧计数(CAP_PROP_FRAME_COUNT)。此外,还有其他需要的功能,如cv2.imshow()、cv2.waitKey()和get()方法,该方法用于读取视频元数据,如帧高度、宽度、fps等。

weixin_42010722的博客 3272

白话FOC控制中各环节的参数的意义与如何设置参数

FOC参数整定是控制系统的关键环节,如同驯马需要调节"智能马鞍"。核心参数分为三类:电流环参数(P/I/D)决定响应速度和稳定性,速度环参数需慢于电流环5-10倍带宽,系统参数(极对数、电阻等)是电机固有属性必须准确设置。调参心法:由内而外先调电流环,遵循先P后I慎用D原则,内环带宽必须大于外环。利用自动辨识工具,通过听觉(滋滋声表示P过大)和波形观察来微调,最终实现精准控制。

汽车软件开发 356

基于Matlab生成并可视化多架飞机轨迹仿真(附源码)

这使我们可以轻松地对直线和恒定转弯进行建模,并具有额外的自由度,可以在直线段和曲线段之间平滑过渡。同样,空气中的物体会经历重力的影响,遵循抛物线(二次)路径。需要更多的航点来适应这些变化,但是轨迹的其余部分需要更少的点。第三个轨迹,如下所示,代表了一架速度更高的飞机。它由两个恒定的转弯组成,飞机在第二个转弯的中间减速。一旦知道(并设置了)物体穿过空间的物理路径,物体的速度作为行进距离的函数就通过三次埃尔米特插值来确定。在此示例中,学习了内部使用的插值符背后的概念,并展示了如何使用少量航点重现场景。

珞瑜的博客 5464

Opencv 视频转为图像序列

基于Opencv的视频转为图像序列方法。

yhl_leo 5万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OpenCV基础(2)使用OpenCV读写视频

在OpenCV中读写视频与读写图像非常相似。视频只不过是一系列通常被称为帧的图像的集合。所以,你需要做的就是在一个视频序列中循环所有的帧,然后一次处理一帧。在这篇文章中,我们将演示如何从一个文件、一个图像序列和一个摄像头读取、显示和写入视频。我们还将研究过程中可能发生的一些错误,并帮助理解如何解决它们。 1.简单版本读写视频 让我们先看一下用于读取视频文件的代码示例。它本质上包含了从磁盘读取和显示视频的功能。随着您的深入,我们将详细讨论在这个实现中使用的函数。 (1)Python代码 import cv2

weixin_43229348的博客 2349

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

opencv将序列图像存储为视频

opencv读取序列图像,然后保存为视频 注意事项:序列图像命名规则及序列图像尺寸,如果设置不对会在生成视频时出错 关于编码方式最好设置参数为-1,这样会有默认编码方式选择框,自己手动设置参数可能会出错

Hello World ! 2419

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【OpenCV 4开发详解】视频加载与摄像头调用

本文首发于“小白学视觉”微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。 前面已经介绍如何通过程序读取图像数据,本节将介绍OpenCV...

小白学视觉 1852

OpenCV 视频文件读取

OpenCV 视频文件读取

青春有梦,且行且学习! 482

Python将视频或者动态图gif逐帧保存为图片

本文是基于opencv将视频和动态图gif保存为图像帧。可以根据输入视频格式的不同,修改第21行。 对动图的处理不同于视频,PIL库包含对图像序列的基本支持。当打开gif图像时,自动加载第一帧。当图像读取完成时,抛出EOFError异常。我们可以使用seek()与tell()函数完成图像帧的读取。 本代码的前部分是对文件的读取。数据集文件结构如下: ...

lianggyu的博客 1万+

opencv(python)-读取图片、视频,轮廓检测

opencv的使用(python) ###1. 读取图片 image=cv2.imread('F:\\demo\\123.jpg') print(image.shape) #(300, 533, 3)读进来的尺寸是(高度,长度,通道) print(np.asarray(image.shape[:2][::-1])) #[533 300] #解析:[:2]表示只取前两维,[::-1]表示逆序,相当...

aaon22357的博客 2986
上一篇: 【OpenCV】SIFT原理与源码分析:DoG尺度空间构造
下一篇: 用MFC写的OPENCV小程序(1)
thystar
博客等级 码龄17年 407粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值