Opencv 托管位图和内存管理

Opencv 托管位图和内存管理,opencv,bitmap,c++-cli,system.drawing,Opencv,Bitmap,C++ Cli,System.drawing,我正在编写一个C++/Cli互操作层,它位于使用opencv从磁盘读取图像的本机库之间。互操作层应将图像转换为托管位图,然后将其发送到c#ui。 通过复制内存,实际的转换是微不足道的。问题是,此应用程序必须处理许多大型图像,因此资源非常密集。因此,我希望避免在内存中保留图像的两个副本,而是在托管位图中重新指定指向图像数据的指针,以指向opencv图像数据 我最初的想法是,我可以锁定托管位图并将Scan0指针指定给opencv指针,然后确保将步幅设置为opencv图像的宽度步长(我使用的是普通的I

我正在编写一个C++/Cli互操作层,它位于使用opencv从磁盘读取图像的本机库之间。互操作层应将图像转换为托管位图,然后将其发送到c#ui。
通过复制内存,实际的转换是微不足道的。问题是,此应用程序必须处理许多大型图像,因此资源非常密集。因此,我希望避免在内存中保留图像的两个副本,而是在托管位图中重新指定指向图像数据的指针,以指向opencv图像数据
我最初的想法是,我可以锁定托管位图并将Scan0指针指定给opencv指针,然后确保将步幅设置为opencv图像的宽度步长(我使用的是普通的IplImage),但当我这样做时,出来的图像是完全黑色的
有没有办法创建托管位图而不将本机图像数据复制到位图中

谢谢,

Max

证明提供了一个构造函数可以实现这一点,请参见

确保opencv图像没有超出范围