【OpenCV】OpenCV图像/视频的读取与写入(C++版) 您所在的位置:网站首页 opencv中imshow显示视频随时间推移显示延时 【OpenCV】OpenCV图像/视频的读取与写入(C++版)

【OpenCV】OpenCV图像/视频的读取与写入(C++版)

2023-10-14 04:12| 来源: 网络整理| 查看: 265

使用C++开发图像处理算法时,最基础的就是利用OpenCV完成图像文件的输入、输出以及自动内存管理(重点)。所以,只要需要掌握一些简单的OpenCV的操作即可。本博文就对这些基础内容进行讲解。

图像操作 图像读取

OpenCV支持bmp、jpg、png、tiff等常用图像格式的解析,所用函数为imread。imread函数原型如下:

Mat imread( const String& filename, int flags = IMREAD_COLOR );

其中,filename参数为图像文件的路径,可以是相对路径,也可以是绝对路径;flags参数为图像文件解析的方式,支持的方式有如下:

IMREAD_UNCHANGED:不对图像文件进行任何转换,直接读取;IMREAD_GRAYSCALE:将任何图像均转换为灰度图像(单通道)进行读取;IMREAD_COLOR:将任何图像均转为RGB彩色图像(三通道)进行读取;IMREAD_ANYDEPTH:如果不设置这个参数,16/32位图像将会自动转为8位图像;IMREAD_ANYCOLOR:将按照图像文件设定的颜色格式进行图像读取;IMREAD_LOAD_GDAL:调用gdal库进行图像文件读取(可以简单地理解为读取TIFF图像文件)。

例如:

#include #include int main(int argc, char const *argv[]) { cv::Mat img = cv::imread("test.png", cv::IMREAD_GRAYSCALE); //宽度 std::cout cv::Mat img = cv::imread("test.png", cv::IMREAD_GRAYSCALE); cv::imwrite("test_copy.png", img); return 0; } 图像遍历的几种方式 OpenCV的at成员函数

OpenCV提供了便利的访问图像数据的接口,at函数原型:

template _Tp& at(int row, int col);

其中,参数row为行号,参数col为列号;模板参数_Tp常用类型如下:

图像类型_Tp参数单通道灰度unsigned char三通道彩色(8位)cv::Vec3b16位灰度unsigned short32位浮点型float双通道32位cv::Vec2f

例如:

#include #include int main(int argc, char const *argv[]) { cv::Mat img = cv::imread("test.png", cv::IMREAD_GRAYSCALE); for (int r = 0; r int data = img.at(r, c); std::cout for(int c = 0; c cv::Mat img = cv::imread("test.png", cv::IMREAD_GRAYSCALE); for(int r = 0; r std::cout cap >> frame; if (frame.empty()) break; cv::imshow("hello", frame); cv::waitKey(50); } cap.release(); return 0; }

在上面的API中还将到set方法,可以指定属性的值。比如,想要跳转到视频的中间的某一帧,就可以通过设置CV_CAP_PROP_POS_FRAMES属性来实现,即:

cap.set(CV_CAP_PROP_POS_FRAMES, 20); //跳转到第20帧 视频保存

OpenCV中通过VideoWriter类对视频进行读取操作以及调用摄像头,该类的API与VideoCapture类似,该类的主要API除了构造函数外,提供了open、IsOpen、release、write和重载操作符 cap >> frame; if (frame.empty()) break; wri



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有