我正在尝试通过c++/cli将一组iplimage从OpenCV传递给另一个程序(.net),该程序不使用iplimage,而是使用byte[]列表。知道如何将iplimage添加/转换到byte[]列表中吗?
谢谢。
发布于 2012-07-10 02:59:57
如果要从iplimage.imageData复制精确像素,可以使用Marshal.Copy将数据从IntPtr (imageData)复制到托管数组(byte[])。
但由于imageData是未压缩的,您可能希望使用imencode或cvEncodeImage将其压缩到中间缓冲区,然后使用上述代码将其复制到byte[]。
发布于 2012-07-10 04:18:59
在做其他事情之前,先花点时间学习how an IplImage is created,以及它存储的信息类型。
然后,请注意,可以通过成员imageData访问图像的像素,这是一个unsigned char*
IplImage* image = cvLoadImage("starwars.jpg", 0);
int img_sz = image->width * image->height * image->nChannels;
unsigned char* data = (unsigned char*) malloc(img_sz);
memcopy(data, image->imageData, img_sz);您必须执行类似的过程才能将其转换为byte[]。顺便说一句,这篇文章]2展示了(在其他方面)如何将IplImage*转换为SDL_Surface*。
发布于 2012-07-10 20:43:10
首先,如果可能的话,我建议您切换到OpenCV的C++接口-与旧的C接口相比,它提供了更多的灵活性和功能。
在C++界面中,执行上述任务的代码片段如下:
cv::Mat image = cv::imread(imname);
uchar *ptr = (uchar*)image.data你可以在任何你想要的地方使用你的ptr(一个8位无符号字节数据)-记住,修改这个数据会修改实际的图像。如果您不希望发生这种情况,可以使用memcpy复制数据。
https://stackoverflow.com/questions/11400544
复制相似问题