最近在做VB.Net和C++进程间用内存映射文件通信的项目。
VB.NET和C++之间的通信就需要传送统一的文件格式,让VB和C++都能解析。
就会遇到这样地问题:VB.NET中Emgu的Image(Of Gray,Byte)怎么才能转为C++中OpenCV的IplImage格式呢?
进程间通信,我用的是内存映射文件的方式,在本文中就不多做讨论了。主要讨论两种格式之间的转换。
首先VB端创建内存映射文件,把Image(Of Gray,Byte).MIplImage.imageDataOrigin指针指向的内存写入内存映射文件中
因为本文的研究对象都是灰度图,所以MIplImage.imageDataOrigin中存放的都是0-255的灰度值。方向是以左上角为起点,横向扫描。
- 'imgbytes是Byte()类型的图片文件
- Dim img As Image(Of Gray, Byte) = New Image(Of Gray, Byte)(Image.FromStream(New MemoryStream(imgbytes)))
- '图片的宽度需是4字节的倍数
- Dim mmfImgSize As Integer = Int((img.Width + 3) / 4) * 4 * img.

该博客讨论如何在VB.NET中使用Emgu的Image(Of Gray,Byte)转换为C++中的OpenCV IplImage格式,以便于两个语言间通过内存映射文件进行进程通信。博主通过创建内存映射文件,将VB.NET中的灰度图像数据写入,然后在C++端读取并构造IplImage。文章强调了灰度图的通道数、图像尺寸处理和内存映射文件操作的重要性。
转OpenCV的IplImage&spm=1001.2101.3001.5002&articleId=48519963&d=1&t=3&u=3d05408a619d43e499269241804322cd)
7408

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



