CvMat与LIplmage之间的相互转换__cvConvert()

cvConvert

cvConvert函数用于图像和矩阵之间的相互转换 为什么要用cvConvert 把IplImage转为矩阵? 因为IplImage里的数据,你只能用uchar的形式存放,当你需要这些图像数据看作数据矩阵来运算时,0~255的精度显然满足不了要求; 然而CvMat里却可以存放任意通道数、任意格式的数据,这个机制方便了研究中的这种需求,转化为矩阵就可以进行更自由的计算。
OpenCV可用以下函数显示一个CvArr类数据mat;
cvNamedWindow(“WinName”,CV_WINDOW_AUTOSIZE);
cvShowImage(“WinName”,mat);
cvWaitKey(0);
但往往仅当mat为IIplmage*类型,且其depth为IPL_DEPTH_8U(8bit无符号整形)时,有较好的显示效果
对于其他深度的IplImage*或者CvMat*类数据,可以使用CvConvert函数进行转换,而后显示。
如下所示
void Show(CvMat* mat)
{
CvSize size = cvSize(mat->width,mat->height);
IplImage* imgBuf = cvCreateImage(size,IPL_DEPTH_8U,1);
cvConvert(mat,imgBuf);
cvNamedWindow(“mat”,CV_WINDOW_AUTOSIZE);
cvShowImage(“image”,mat);
cvWaitKey(0);
cvReleaseImage(&imgBuf);
}
//转化成单通道图像再处理(灰度)
cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);
cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);
cvConvert(pFrImg, pFrameMat);
cvConvert(pFrImg, pFrMat);
cvConvert(pFrImg, pBkMat);
//将背景转化为图像格式,用以显示
cvConvert(pBkMat, pBkImg);

cvConvert

cvConvert函数用于图像和矩阵之间的相互转换 为什么要用cvConvert 把IplImage转为矩阵? 因为IplImage里的数据,你只能用uchar的形式存放,当你需要这些图像数据看作数据矩阵来运算时,0~255的精度显然满足不了要求; 然而CvMat里却可以存放任意通道数、任意格式的数据,这个机制方便了研究中的这种需求,转化为矩阵就可以进行更自由的计算。
OpenCV可用以下函数显示一个CvArr类数据mat;
cvNamedWindow(“WinName”,CV_WINDOW_AUTOSIZE);
cvShowImage(“WinName”,mat);
cvWaitKey(0);
但往往仅当mat为IIplmage*类型,且其depth为IPL_DEPTH_8U(8bit无符号整形)时,有较好的显示效果
对于其他深度的IplImage*或者CvMat*类数据,可以使用CvConvert函数进行转换,而后显示。
如下所示
void Show(CvMat* mat)
{
CvSize size = cvSize(mat->width,mat->height);
IplImage* imgBuf = cvCreateImage(size,IPL_DEPTH_8U,1);
cvConvert(mat,imgBuf);
cvNamedWindow(“mat”,CV_WINDOW_AUTOSIZE);
cvShowImage(“image”,mat);
cvWaitKey(0);
cvReleaseImage(&imgBuf);
}
//转化成单通道图像再处理(灰度)
cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);
cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);
cvConvert(pFrImg, pFrameMat);
cvConvert(pFrImg, pFrMat);
cvConvert(pFrImg, pBkMat);
//将背景转化为图像格式,用以显示
cvConvert(pBkMat, pBkImg);

猜你喜欢

转载自blog.csdn.net/baidu_38172402/article/details/81811999