当然, 除了图像对象可以转换成OpenCV对象以外,还有Mask, Matrix对象也可以方便地与OpenCV对应的对象进行相互转换。
(注意:与OpenCV图象转换的库为cvio,该库使用的OpenCV版本为2.4.8,在开发过程中请确保使用的OpenCV 版本与该版本兼容。)
将RVB图像对象转换为OpenCV对象,方式如下:
IplImage* iplImg = rvExportImageCv(image, FALSE);
…CvReleaseImage(&iplImg);
或者,仅创建一个包含RVB的image对象中图像数据的OpenCV图像对象,如:
IplImage* iplImg = rvExportImageCv(image, TRUE);
…cvReleaseImageHeader (&iplImg);
另外,可以从RVB里面的mask可以直接创成一个1通道的灰度OpenCV图像。如:
IplImage* iplImg = rvExportMaskCv( mask, 255); ….CvReleaseImage(&iplImg);
与图像转换类似,也可以将OpenCV图像对象转化成一个模版对象。如下:
RvMask mask = rvCreateMaskCv(IplImage* image, -1 );
…rvDestroyMask(mask);
OpenCV的矩阵对象与RVB矩阵对象有些差异,OpenCV矩阵对象和OpenCV图像对象都可以转换成RVB矩阵对象,由于OpenCV矩阵对象和OpenCV图像对象虽然在设计理念上是一种继承关系,但是其数据结构上存在差异,如用使用不同函数进行转换,如CvMat转换成RVB的矩阵对象, OpenCV的矩阵对象与RVB矩阵对象有些差异,OpenCV矩阵对象和OpenCV图像对象都可以转换成RVB矩阵对象,由于OpenCV矩阵对象和OpenCV图像对象虽然在设计理念上是一种继承关系,但是其数据结构上存在差异,如用使用不同函数进行转换,如CvMat转换成RVB的矩阵对象,
BOOL bVirtual = FALSE;
RvMatrix mat = rvCreateMatrixCv( cv_mat, bVirtual);
…rvDestroyMatrix(mat);
IplImage图像转换成RVB的矩阵对象方式一样,只是函数为rvCreateMatrixCv2。在RVB里面,图像,模版都是从矩阵里面继承而来,数据结构也是严格的继承关系,这些对象都可以按照下面的方式进行导出一个OpenCV的矩阵对象:
RvMatrix matrix = rvCreateMatrix(RDT_BYTE, 240, 320);
CvMat* cv_mat = rvExportMatrixCv( matrix, FALSE); …rvDestroyMatrix(matrix);
cvReleaseMat(&cv_mat);
RvImage im = rvLoadImage(“myimage.jpg”);
该语句将文件名为myimage.jpg的图像文件打开,根据后缀名jpg,自动按照该类型的格式进行解码,成功以后,生成一个新的RVB图像(注意:该图像在使用完成以后,需要通过rvDestroyImage函数进行释放)。RVB仅支持8位,24位,32位的标准图像,不管文件图像实际的深度,都将自动转换成满足深度要求最接近的图像格式。 如果要将保存到磁盘文件,如JPG格式的图像文件,可以按照下面的方式进行:rvSaveImage(image, “myimage.jpg”, RV_IFF_JPG);
在很多的应用中,常常需要将图像保存到内存的缓冲中去,
int w = rviGetWidth(image);
int h= rviGetHeight(image);
UINT nSize = w * h * 4 + \
char* pBuf =(char*) MPM_ALLOC(nSize);
RV_ASSERT(pBuf);
UINT nSizeUsed = rvExportImageToMemory(image, nFormat, pBuf, nSize);
MPM_FREE(pBuf);
当然,与从图像文件从文件中读取相同,RVB同样提供了函数直接从内存的图像缓冲中读取,内存中的数据可以包含图像格式信息,或者只有非压缩文件的图像数据。具体方法请参考《RVB函数参考手册》。
抖音视频号: 第一感机器视觉
微信公众号: 精浦科技
深圳市软云动力科技有限公司
东莞办事处: 广东省东莞市松湖智谷B6栋225b
公司地址: 广东省深圳市南山区桃园路金桃园大厦2191
深圳市软云动力科技有限公司 版权所有 鄂ICP备2022015826号-2