yuv图像的存储和rgb图像的存储
2018-01-12 09:38
2356 查看
读取一张rgb图像
cv::Mat src = cv::imread("a.jpg", 1);
在opencv中会产生颜色相反的结果,所以使用之前转一下颜色
cvtColor(src, src, CV_RGB2BGR);
我们需要用大小为3*width*height字节的数组来存放一张 width*height大小的rgb图像
unsigned char* rgb = new unsigned char[src.cols*src.rows*3];
注意src.cols就是width,src.rows就是height
如果是想用来保存yuv的话,就需要大小是src.cols*src.rows*3/2个字节的数组
unsigned char* yuv= new unsigned char[src.cols*src.rows*3/2];
注意3/2一定不要写到最前面
unsigned char * dst_y = yuv ;
unsigned char * dst_u = yuv + src.cols*src.rows;
unsigned char * dst_v = dst_u + src.cols*src.rows/4;
假设现在我们通过rgb2yuv已经将yuv数据装载到这个yuv首地址的数组里了,我们来获得这个yuv的文件
std::FILE *f = NULL;
f = std::fopen("/data/dstall.yuv", "w+");
std::fwrite(yuvall, sizeof(char), src.rows * src.cols * 3/2, f);
现在我们想要通过显示一张rgb图像的方式来查看一个yuv文件的Y,U,V分布,于是我们先来定制这张图像的大小
cv::Mat dstall = cv::Mat(src.rows*3/2, src.cols, CV_8U, yuv);
src.rows*3/2是指这张图像的高度的字节大小,src.cols是这张图像的宽度字节大小,要得到YUV图像分布,需要采用
单通道CV_8U,yuv对应的图像数据源地址。
如果我们是想获得一张显示图像的rgb图像呢.我们可以这样做
cv::Mat cv::Mat dstRGB = cv::Mat(src.rows, src.cols, CV_8U3, rgbaddr);
最后将这个图片保存起来
cv::imwrite("dest.png",dstRGB );
cv::Mat src = cv::imread("a.jpg", 1);
在opencv中会产生颜色相反的结果,所以使用之前转一下颜色
cvtColor(src, src, CV_RGB2BGR);
我们需要用大小为3*width*height字节的数组来存放一张 width*height大小的rgb图像
unsigned char* rgb = new unsigned char[src.cols*src.rows*3];
注意src.cols就是width,src.rows就是height
如果是想用来保存yuv的话,就需要大小是src.cols*src.rows*3/2个字节的数组
unsigned char* yuv= new unsigned char[src.cols*src.rows*3/2];
注意3/2一定不要写到最前面
unsigned char * dst_y = yuv ;
unsigned char * dst_u = yuv + src.cols*src.rows;
unsigned char * dst_v = dst_u + src.cols*src.rows/4;
假设现在我们通过rgb2yuv已经将yuv数据装载到这个yuv首地址的数组里了,我们来获得这个yuv的文件
std::FILE *f = NULL;
f = std::fopen("/data/dstall.yuv", "w+");
std::fwrite(yuvall, sizeof(char), src.rows * src.cols * 3/2, f);
现在我们想要通过显示一张rgb图像的方式来查看一个yuv文件的Y,U,V分布,于是我们先来定制这张图像的大小
cv::Mat dstall = cv::Mat(src.rows*3/2, src.cols, CV_8U, yuv);
src.rows*3/2是指这张图像的高度的字节大小,src.cols是这张图像的宽度字节大小,要得到YUV图像分布,需要采用
单通道CV_8U,yuv对应的图像数据源地址。
如果我们是想获得一张显示图像的rgb图像呢.我们可以这样做
cv::Mat cv::Mat dstRGB = cv::Mat(src.rows, src.cols, CV_8U3, rgbaddr);
最后将这个图片保存起来
cv::imwrite("dest.png",dstRGB );
相关文章推荐
- 【数字图像处理】YUV420转RGB并BMP存储<纯C++实现>
- 视频音频流_RGB与YUV图像格式
- 数字图像处理 颜色空间RGB、HSI、CMYK、YUV的相互转换
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)
- 图像RGB格式与YUV格式互转
- DSP48E1的使用,实现RGB转YUV空间(1)---一步一步做图像拼接
- 数字图像处理 颜色空间RGB、HSI、CMYK、YUV的相互转换
- 视频与图像RGB/YUV格式详解
- 视频与图像RGB/YUV格式详解
- YUV和RGB图像格式说明
- 图像处理基础(像素、RGB、YUV etc.)的那点小事
- 视频与图像RGB/YUV格式详解
- 图像色彩空间YUV和RGB的差别
- 图像处理之基础---滤波器之高斯低通滤波器3c代码实现yuv,rgb
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 不同颜色空间的图像转换(RGB到HSV,YUV,Lab)
- RGB与YUV图像视频格式的相互转换
- YUV与RGB图像格式之间的关系
- RGB图像格式和YUV图像格式
- 视频与图像RGB/YUV格式详解