如何将unsigned char*(或BYTE*)图像数据封装成OpenCV中Mat类型
2016-11-22 12:09
423 查看
如何将unsigned char*(或BYTE*)图像数据封装成OpenCV中Mat类型
环境:vs2008 + opencv2.4.6
根据待封装图像数据的宽度,封装方法有两种。
下面以封装单通道、8位灰度BMP图像为例进行说明,其中读BMP图像程序是自己开发的。
第一种情况:图像宽度满足4的倍数,即满足BMP格式宽度要求。
其中,imData的尺寸是width*height,因我的Read8bitbmp读取的是有效数据;此时,width == lineByte.
第二种情况:图像宽度不满足BMP格式宽度时
RdWtIm rdWtIm;
int width = 0;
int height = 0;
int lineByte = 0;
BYTE* imData = rdWtIm.Read8bitbmp("lena.bmp", &width, &height);
lineByte = (width + 3)/4*4; //格式宽度
printf("width = %d\n", width);
printf("height = %d\n", height);
printf("lineByte = %d\n", lineByte);
Mat iMat(height, width, CV_8UC1, imData, width);
namedWindow("lena");
imshow("lena", iMat);
其中,imData的尺寸是width*height,因我的Read8bitbmp读取的是有效数据;此时,width<lineByte.
2.结果
注意:
1.上述程序只是为了验证如何将相机传输来的内存数据封装成Mat,以便利用opencv来进行图像处理或计算机视觉开发;
2.如果数据已经保存为图像文件,完全可以使用opencv自带的读图像函数imread。
3.如果利用c/c++自己开发读bmp图像,可以考虑返回的即是格式宽度的图像数据,这样封装的时候一直使用lineByte就可以。
4.可以参考我读写BMP图像程序。
http://blog.csdn.net/lyc_daniel/article/details/9193793
环境:vs2008 + opencv2.4.6
根据待封装图像数据的宽度,封装方法有两种。
下面以封装单通道、8位灰度BMP图像为例进行说明,其中读BMP图像程序是自己开发的。
第一种情况:图像宽度满足4的倍数,即满足BMP格式宽度要求。
RdWtIm rdWtIm; int width = 0; int height = 0; int lineByte = 0; BYTE* imData = rdWtIm.Read8bitbmp("lena.bmp", &width, &height); lineByte = (width + 3)/4*4; //格式宽度 printf("width = %d\n", width); printf("height = %d\n", height); printf("lineByte = %d\n", lineByte); Mat iMat(height, width, CV_8UC1, imData, lineByte); namedWindow("lena"); imshow("lena", iMat);
其中,imData的尺寸是width*height,因我的Read8bitbmp读取的是有效数据;此时,width == lineByte.
第二种情况:图像宽度不满足BMP格式宽度时
RdWtIm rdWtIm;
int width = 0;
int height = 0;
int lineByte = 0;
BYTE* imData = rdWtIm.Read8bitbmp("lena.bmp", &width, &height);
lineByte = (width + 3)/4*4; //格式宽度
printf("width = %d\n", width);
printf("height = %d\n", height);
printf("lineByte = %d\n", lineByte);
Mat iMat(height, width, CV_8UC1, imData, width);
namedWindow("lena");
imshow("lena", iMat);
其中,imData的尺寸是width*height,因我的Read8bitbmp读取的是有效数据;此时,width<lineByte.
2.结果
注意:
1.上述程序只是为了验证如何将相机传输来的内存数据封装成Mat,以便利用opencv来进行图像处理或计算机视觉开发;
2.如果数据已经保存为图像文件,完全可以使用opencv自带的读图像函数imread。
3.如果利用c/c++自己开发读bmp图像,可以考虑返回的即是格式宽度的图像数据,这样封装的时候一直使用lineByte就可以。
4.可以参考我读写BMP图像程序。
http://blog.csdn.net/lyc_daniel/article/details/9193793
相关文章推荐
- 如何将unsigned char*(或BYTE*)图像数据封装成OpenCV中Mat类型
- 如何将unsigned char*(或BYTE*)图像数据封装成OpenCV中Mat类型
- opencv 数据类型转换:CvArr, Mat, CvMat, IplImage, BYTE 转
- opencv Mat 显示不同数据类型图像
- Halcon 与 OpenCV 图像数据类型转换 HObject和 Mat
- OpenCv (正式篇)6----core组件--Mat(最基本的图像数据类型)
- opencv 数据类型转换:CvArr, Mat, CvMat, IplImage, BYTE
- OpenCV图像数据类型Mat不再陌生
- OpenCV Mat数据类型及位数总结
- KeyValuePair<byte, string> 类型的数据如何绑定到ComboBox控件上
- OpenCV中IplImage图像格式与 BYTE图像数据的转换
- opencv中Mat类型数据的索引修改和多通道数据提
- switch能接受的数据类型int short byte char 及其封装类
- OpenCV mat数据类型及位数(转载)
- 如何将内存图像数据封装成QImage V1
- 图像数据类型的转换 matlab opencv
- 在MFC中如何显示OpenCV的图像Mat
- [opencv]图像处理的基本数据类型以及通道和维度理解
- 【OpenCV学习笔记】之二:Mat使用的潜规则----对数据类型敏感
- 如何将int类型数据转换成byte数组