cv::Mat到YUV420的转换《转》
某些特定场合我们会经常遇到yuv420格式的视频文件,这种视频帧无法直接用于opencv,故而,需要进行格式转换;幸运的是,opencv提供了rgb到yuv420的格式转换函数;下面给出基本用法;
函数1:读取avi格式的视频文件,转换成Yuv420格式,并写入文件;
void WriteYuv()
{
cv::VideoCapture vc;
bool flag = vc.open("S1000008.avi");
if (!flag)
{
printf("avi file open error \n");
system("pause");
exit(-);
} int frmCount = vc.get(CV_CAP_PROP_FRAME_COUNT);
frmCount -= ;
printf("frmCount: %d \n", frmCount); int w = vc.get(CV_CAP_PROP_FRAME_WIDTH);
int h = vc.get(CV_CAP_PROP_FRAME_HEIGHT);
int bufLen = w*h*/;
unsigned char* pYuvBuf = new unsigned char[bufLen];
FILE* pFileOut = fopen("result.yuv", "w+");
if (!pFileOut)
{
printf("pFileOut open error \n");
system("pause");
exit(-);
}
printf("pFileOut open ok \n"); for (int i=; i<frmCount; i++)
{
printf("%d/%d \n", i+, frmCount); cv::Mat srcImg;
vc>>srcImg; cv::imshow("img", srcImg);
cv::waitKey(); cv::Mat yuvImg;
cv::cvtColor(srcImg, yuvImg, CV_BGR2YUV_I420);
memcpy(pYuvBuf, yuvImg.data, bufLen*sizeof(unsigned char)); fwrite(pYuvBuf, bufLen*sizeof(unsigned char), , pFileOut);
} fclose(pFileOut);
delete[] pYuvBuf;
}
函数二,读取yuv420格式的文件,转换成cv::Mat格式,并予以显示:
void DisplayYUV()
{
int w = ;
int h = ;
printf("yuv file w: %d, h: %d \n", w, h); FILE* pFileIn = fopen("result.yuv", "rb+");
int bufLen = w*h*/;
unsigned char* pYuvBuf = new unsigned char[bufLen];
int iCount = ; for(int i=; i<; i++)
{
fread(pYuvBuf, bufLen*sizeof(unsigned char), , pFileIn); cv::Mat yuvImg;
yuvImg.create(h*/, w, CV_8UC1);
memcpy(yuvImg.data, pYuvBuf, bufLen*sizeof(unsigned char));
cv::Mat rgbImg;
cv::cvtColor(yuvImg, rgbImg, CV_YUV2BGR_I420); cv::imshow("img", yuvImg);
cv::waitKey(); printf("%d \n", iCount++);
} delete[] pYuvBuf; fclose(pFileIn);
}
===================================
原贴地址:https://blog.csdn.net/carson2005/article/details/38351717
cv::Mat到YUV420的转换《转》的更多相关文章
- Convert between cv::Mat and QImage 两种图片类转换
在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...
- cv::mat转换成QImage的问题
在进行cv::mat转换为QImage过程中,经常出现问题: cv::Mat image; ...QImage img=QImage((const unsigned char*)(image.data ...
- OpenCV图片类cv::Mat和QImage之间进行转换(好多相关文章)
在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...
- QImage与cv::Mat转换;
QImage主要格式有QImage::Format_RGB32, QImage::Format_RGB888, QImage::Format_Index8, 不同的格式有不同的排布: 格式部分可以参考 ...
- CvArr* to cv::Mat 转换
OpenCV中的CvArr*的定义的一个空类型的指针,可以转换为其派生类CvMat和IplImage,那么如何将其转化为cv::Mat呢,其实很简单,只需要一行代码即可: // CvArr *_img ...
- cv::Mat转换QImage
cvtColor(img, img, CV_BGR2RGB); QImage image((uchar*)img.data,img.cols,img.rows,QImage::Format_RGB88 ...
- 访问cv::Mat中的数据时遇到的指针类型问题
在用Opencv的时候由于下图原本的图像尺寸是1111*1111,要进行resize,代码如下: cv::Mat img = cv::imread("//Users//apple//td3/ ...
- Write cv::Mat to a file
如果我们想把OpenCV中的矩阵数据类型cv::Mat保存在一个文件中,可以使用如下的代码: void writeMatToFile(cv::Mat& m, const char* filen ...
- QImage 与 cv::Mat 之间的相互转换
近期做图像处理方面的项目比較多,非常多算法自己从头写的话太浪费时间,并且自己写的也不一定完好,早就听说OpenCV在图像处理算法方面功能非常强大,一直没时间学习,这次正好项目用到了.暂时抱佛脚学习些O ...
随机推荐
- 函数对象(functional)
来自STL中的概念:如果f是一个function object,则可以将operator()作用于f身上. 调用函数对象时构造函数和operator()执行顺序 首先执行构造函数,构造出一个匿名对象 ...
- tomcat源码阅读之过滤器
一.Servlet过滤器: 1.介绍: Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用. Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request ...
- C# 中取绝对值的函数
System.Math.Abs(float value); System.Math.Abs(decimal value); System.Math.Abs(int value); System.Mat ...
- 打开Visual Studio 2012的解决方案 连接 Dynamics CRM 2011 的Connect to Dynamics CRM Server 在其工具下没有显示
一.使用TFS 代码管理,发现Visual Studio 2012 菜单栏 工具下的Connect to Dynamics CRM Server 没有显示. 平常打开VS下的工具都会出现Connect ...
- WF4.0 基础篇 (一)开始使用WF
来源:https://www.cnblogs.com/caosenianhuan/p/WF.html 最近公司要重新上线一套新的CRM系统,要重整老系统里的业务流模块,团队讨论已微软的workflow ...
- 实际用户ID和有效用户ID (二)
看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解.今天好好区分了一下这几个概念并总结如下.说白了这几个UID引出都是为了系统的权限管理. 下面分别 ...
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例
一.引言: 上篇文章提起关于HBase插入性能优化设计到的五个参数,从参数配置的角度给大家提供了一个性能测试环境的实验代码.根据网友的反馈,基于单线程的模式实现的数据插入毕竟有限.通过个人实测,在我的 ...
- springMVC学习(9)-全局异常处理
一.异常处理思路: 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. 系统的da ...
- jstack 查看线程状态
使用jstack pid命令可以查看JVM的线程状态,其中值得关注的线程状态有:死锁,Deadlock(重点关注)执行中,Runnable等待资源,Waiting on condition(重点关注) ...
- java操作hbase1.3.1的增删改查
我的eclipse程序在windows7机器上,hbase在linux机器上 1,首先在C:\Windows\System32\drivers\etc下面的HOSTS文件,加上linux 集群 2.直 ...