最近在使用JNI,设法从Java中调用OpenCV的函数。在OpenCV中图像是以IplImage的形式封装的。IplImage是一个 Header,定义了图像的各种属性,通过查看IplImage结构体我们可以发现,图像数据实际上也是在一段连续的内存中分配的, IplImage.imageData就是指向这块数据的指针。随便访问一个结构体的成员是不好的,所以OpenCV提供了访问原始数据RawData的 方法
void
cvGetRawData(
const
CvArr
*
arr, uchar
**
data,
int
*
step
=
NULL, CvSize
*
roi_size
=
NULL );
典型的,对于一个三通道,颜色深度为256的图像img,假设我们知道它的width,height,为了取得其RawData,可以定义一个数组data,并调用cvGetRawData()函数,将RawData存放到data中:
void
cvGetRawData(
const
CvArr
*
arr, uchar
**
data,
int
*
step
=
NULL, CvSize
*
roi_size
=
NULL );
典型的,对于一个三通道,颜色深度为256的图像img,假设我们知道它的width,height,为了取得其RawData,可以定义一个数组data,并调用cvGetRawData()函数,将RawData存放到data中:
int
raw_data_length
=
width
*
height
*
3
;
byte * data = ( byte * )malloc(raw_data_length * sizeof ( byte
byte * data = ( byte * )malloc(raw_data_length * sizeof ( byte

博客探讨了在OpenCV与Java间处理图像数据时遇到的问题,特别是关于RawData Size和Step的错误。虽然没有找到具体错误源,但通过特定代码实现了正确数据获取,实现了两者之间的图像数据对应。
最低0.47元/天 解锁文章
4918

被折叠的 条评论
为什么被折叠?



