咸鱼希在努力 2022-04-13 17:07 采纳率: 0%
浏览 58

MATLAB与C#混合编程问题,图片参数的传递和返回

matlab与c#进行混合编程,matlab生成dll文件以供c#调用,图像参数在传递的过程中出现问题,有的图片有返回值,有的图片没有返回值,想请问为什么会出现这种情况,该如何修改,谢谢您的评论和指导

**c#端代码 **


Image a =pictureBox1.Image;
               Bitmap bit_original = new Bitmap(a);
                int height = bit_original.Height;
                int width = bit_original.Width;
                int[, ,] rgb = new int[3, height, width];
               
                for (int i = 0; i < height; i++)
                {
                    for (int j = 0; j < width; j++)
                    {
                        rgb[0, i, j] = bit_original.GetPixel(j, i).R;
                        rgb[1, i, j] = bit_original.GetPixel(j, i).G;
                        rgb[2, i, j] = bit_original.GetPixel(j, i).B;
                    }
                }
                MWNumericArray matrix = new MWNumericArray(rgb);

               Class1 text = new brenner.Class1();
        
               Class2 te = new bt.Class2();
             MWArray result = te.brenner(matrix);
               label1.Text = result.ToString();

matlab端方法

function outval = brenner(img) 
% OUTVAL = EDGE_INTENSITY(IMG) 
%img=imread(dir);
if nargin == 1 
    img=rgb2gray(img);
    img = double(img); 
    % Create horizontal sobel matrix 
   [M,N]=size(img);    
 FI=9999;        
 for x=1:M-2      
     for y=1:N 
         FI=FI+(img(x+2,y)-img(x,y))*(img(x+2,y)-img(x,y)); 
     end 
 end 
    outval = FI; 

else   
    error('Wrong number of input!'); 
end 

运行结果

正确运行结果,有返回值

img

错误运行结果,返回值为9999

img

所有测试图片都可以在matlab下用该函数正确运行,不知道为什么c#下就运行的乱七八糟,或者说还有别的方法可以用于c#与matlab之间进行图片参数的传递吗

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-04-14 14:07
    关注

    不要做A语言代码修改为B语言代码的无用功。
    也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。
    只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。
    即可很方便地让A、B两种语言之间协调工作。
    比如:
    A将请求数据写到文件a.txt,写完后改名为aa.txt
    B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,再将b.txt改名为bb.txt
    A发现bb.txt存在时,读取其内容,读完后删除bb.txt
    以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。
    除非A或B不支持判断文件是否存在、文件读写和文件更名。
    但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢?
    可以将临时文件放在RamDisk上提高效率减少磨损磁盘。
    数据的结构很复杂的话,文本文件的格式问题可参考json或xml

    共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的:
    ·进程之间松耦合
    ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。
    ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。
    ·方便在线开关服务,只需删除或创建该临时文本文件即可。
    ·方便实现分布式和负载均衡。
    ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满)
    ·……

    “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边,
    回头是“使用共享纯文本文件进行信息交流”的岸!

    评论

报告相同问题?

问题事件

  • 修改了问题 4月13日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 程序实在不会写,要秃了
  • ¥15 pycharm导入不了自己的包
  • ¥15 C#.net通过内网url地址获取文件并下载问题,浏览器postman可以正常下载,用程序不行
  • ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
  • ¥15 关于R语言单因素与多因素线性回归的平均值
  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度