首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Iplimage to List<byte[]>

Iplimage to List<byte[]>
EN

Stack Overflow用户
提问于 2012-07-10 02:03:24
回答 4查看 3.3K关注 0票数 0

我正在尝试通过c++/cli将一组iplimage从OpenCV传递给另一个程序(.net),该程序不使用iplimage,而是使用byte[]列表。知道如何将iplimage添加/转换到byte[]列表中吗?

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-10 02:59:57

如果要从iplimage.imageData复制精确像素,可以使用Marshal.Copy将数据从IntPtr (imageData)复制到托管数组(byte[])。

但由于imageData是未压缩的,您可能希望使用imencodecvEncodeImage将其压缩到中间缓冲区,然后使用上述代码将其复制到byte[]

票数 0
EN

Stack Overflow用户

发布于 2012-07-10 04:18:59

在做其他事情之前,先花点时间学习how an IplImage is created,以及它存储的信息类型。

然后,请注意,可以通过成员imageData访问图像的像素,这是一个unsigned char*

代码语言:javascript
复制
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*

票数 0
EN

Stack Overflow用户

发布于 2012-07-10 20:43:10

首先,如果可能的话,我建议您切换到OpenCV的C++接口-与旧的C接口相比,它提供了更多的灵活性和功能。

在C++界面中,执行上述任务的代码片段如下:

代码语言:javascript
复制
cv::Mat image = cv::imread(imname);
uchar *ptr = (uchar*)image.data

你可以在任何你想要的地方使用你的ptr(一个8位无符号字节数据)-记住,修改这个数据会修改实际的图像。如果您不希望发生这种情况,可以使用memcpy复制数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11400544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档