机器视觉与图像处理
多功能和易用运动控制框架
支持图像模板深度学习

第四部分 RVB图像对象的输入输出

RVB图像对象可以很方便地输出到磁盘文件,也可以从磁盘文件中读出,还可以直接对内存中的图像数据进行读取。为了与OpenCV兼容,RVB的图像对象可以与OpenCV图像对象进行相互转换,这样不但可以直接调用OpenCV的各种算法函数,进行各种图像处理和分析,而且也可以充分利用RVB的高级图像显示功能,满足各种机器视觉应用的要求。

当然, 除了图像对象可以转换成OpenCV对象以外,还有Mask, Matrix对象也可以方便地与OpenCV对应的对象进行相互转换。

(注意:与OpenCV图象转换的库为cvio,该库使用的OpenCV版本为2.4.8,在开发过程中请确保使用的OpenCV 版本与该版本兼容。)

4.1 RVB与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);

4.2 OpenCV与RVB矩阵的互转换

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);

4.3 文件图像的保存和读取

RVB提供了简单易用的函数用于图像的保存和读取,支持当前绝大部分的图像格式(具体的格式详见附表5)。 RVB可以根据用户提供的文件的扩展名来决定如何打开图像文件。如:

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

二维码1 二维码2 二维码3


深圳市软云动力科技有限公司 版权所有  鄂ICP备2022015826号-2   

统计显示 ▼