如何将unsigned char*(或BYTE*)图像数据封装成OpenCV中Mat类型

原创 2013年12月02日 15:45:06

如何将unsigned char*(或BYTE*)图像数据封装成OpenCV中Mat类型

环境:vs2008 + opencv2.4.6

根据待封装图像数据的宽度,封装方法有两种。

下面以封装单通道、8位灰度BMP图像为例进行说明,其中读BMP图像程序是自己开发的。

第一种情况:图像宽度满足4的倍数,即满足BMP格式宽度要求。

1.程序

	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.

2.



第二种情况:图像宽度不满足BMP格式宽度时

1.程序

	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



版权声明:本文为博主原创文章,未经博主允许不得转载。

【OpenCV】OpenCV的类型转换问题(BYTE、IplImage、Mat等)

1、BYTE转IplImage(需要每行字节对齐) IplImage *prou_GetImage(CvSize size, UINT8 *ImgData,int nDepth, int nCha...

CvArr、Mat、CvMat、IplImage、BYTE转换(总结而来)

一、Mat类型:矩阵类型,Matrix。     在openCV中,Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。     Mat有3个重要的方法: ...

【Halcon】图像BYTE数据生成 Mat 格式和 Hobject 格式

//--------------------------------// if ( nImgType == 0 ) { nImgMatType = 1; unsigned char *dataGra...

opencv中Mat与数组之间值传递的快速方法

1.将数组内容传递给Mat示例代码:unsigned char cbuf[height][width]; cv::Mat img(height, width, CV_8UC1, (unsigned c...
  • GH_HOME
  • GH_HOME
  • 2016年08月03日 11:15
  • 11303

图像处理-将uchar*数据转换成Mat,Iplimage*

1.Mat基础 在计算机内存中,数字图像是已矩阵的形式保存的。 OpenCV2中,数据结构Mat是保存图像像素信息的矩阵,它主要包含两部分:矩阵头和一个指向像素数据的矩阵指针。 ...

char*->IplImage、char*->Mat转换

/************************************************************************ flag==0: gray flag==1: rgb...

OpenCV Java学习笔记(一)--Mat矩阵的数据类型转换

最近正在使用opencv做一些东西,用的是java api。遇到一个问题,用opencv读取一个灰度图的时候,mat对象的数据类型是CV_8UC1,如果直接使用mat.get(int, int, by...

OpenCV的CvArr, Mat, CvMat, IplImage, BYTE转换

一、Mat类型:矩阵类型,Matrix。 在openCV中,Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。Mat有3个重要的方法:1、Mat mat = im...
  • Augusdi
  • Augusdi
  • 2013年04月28日 15:40
  • 8600

OpenCV参考手册之Mat类详解(三)

Mat::eye 返回一个恒等指定大小和类型矩阵。 C++: static MatExpr Mat::eye(int rows, int cols, inttype) C++: static MatE...

用unsigned char 赋值给Mat

用unsigned char 赋值给Mat 例子: cv::Mat Image(64,64,CV_8UC1); for (int i=0;i { for (int j=0;j { Ima...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何将unsigned char*(或BYTE*)图像数据封装成OpenCV中Mat类型
举报原因:
原因补充:

(最多只允许输入30个字)