matlab小问题

matlab小问题,第1张

imsubtract是图像处理工具箱自带的函数,但你把自己写的脚本也保存成imsubtractm了,导致遮盖了原来的函数。把你的文件改名就可以了(注意在资源管理器里面改,不要在编辑器里面另存)

希望对你能有所帮助。

有这么几个组合:

1LabVIEW + Matlab的。 LabVIEW具有强大的数据采集功能,自动测试占60%的市场份额在国外和国内尚未开发。它的相机有很多很好的支持,与NI视觉开发模块视觉可以很容易地实现诸多的功能。它可以计算出与数学联合开发的方便的工具,MATLAB函数极其强大的。然而,库函数并不富有。

2VC + +系列产品。现在使用最广泛的工业。工业相机生产企业都将有VC开发工具包。有很多的开源的支持库,如OpenGL,OpenCV的,等,因此,它也是非常强大的。但VC开始缓慢,编程是一个更加复杂,维护困难。

3Delphi。我不熟悉,说是搞图像处理的是非常强大的。现在想太多。

说简单的图像处理,图像采集不涉及没有其他比非MATLAB。这是太强大了。 matlab做的非常少,很好的实现了图像采集。我现在做的机器人双目立体视觉与LabVIEW + Matlab的联合开发,以至于后来,我觉得只是利用Matlab,但已经买了,找到MATLAB控制摄像头捕捉到好。

电子邮件:favor188@gmailcom

Hmily

大小不相同你怎么做加减乘除?

A) 图像加法运算

I=imread('ricetif');

imshow(I)

J=imread('cameramantif');

figure,imshow(J)

K=imadd(I,J);

figure,imshow(K)

K2=imadd(I,J,'uint16');

figure,imshow(K2,[])

RGB=imread('flowerstif');

RGB2=imadd(RGB,50);

imshow(RGB)

figure,imshow(RGB2)

RGB3=imadd(RGB,100);

figure,imshow(RGB3)

B) 图像减法运算

I=imread('ricetif');

imshow(I)

background = imopen(I,strel('disk',15)); %估计背景图像

figure, imshow(background);

I2=imsubtract(I,background); %从原始图像中减去背景图像

figure, imshow(I2)

C) 图像乘法运算

I=imread('moontif');

J=immultiply(I,12);

K=immultiply(I,05);

imshow(I)

figure,imshow(J)

figure,imshow(K)

的输出自己改吧

原因很简单,回调函数popupmenu_Callback中没有定义变量im1和im2,你直接用这两个为定义的变量进行运算,当然会出错。

类似的问题在回调函数OKpush_Callback也有,那里面的im3同样也没有定义。

 

你需要明白,每一个回调函数都是“函数”,它们有各自独立的工作区,不能够把不同函数工作区的变量串着使用。要想在不同工作区之间交换数据,基本的做法有两种:

1、使用函数的输入参数表。

但由于GUI回调函数的参数形式是固定的,所以这种方法没有用。

2、使用全局变量。

例如,在读入的函数里定义global im1 im2

在 popupmenu_Callback里定义global im1 im2 im3

在OKpush_Callback里定义global im3

即可让你的代码运行(global应该在函数体的最前面)。

 

但是,使用全局变量尽管有时候比较方便,但不属于推荐的方式。做GUI推荐的做法有这样两种:

1、通过句柄获取数据。

回调函数的输入参数有handles这个变量,里面记录了GUI各要素的句柄,如果里面有图像的句柄,则可以通过get函数获取其CData属性,即为图像数据。

2、通过setappdata和getappdata传递数据。

例如,在读入的函数里加上:

    setappdata(gcf,'im1',im1);

    setappdata(gcf,'im2',im2);

在 popupmenu_Callback里加上:

    im1=getappdata(gcf,'im1');

    im2=getappdata(gcf,'im2');

    %%%% 计算im3

    setappdata(gcf,'im3',im3);

在OKpush_Callback里加上:

    im3=getappdata(gcf,'im3');

 

另外有个建议:你的popupmenu和OK按钮二者的代码其实可以合并:

如果希望选完popup就立即显示新图像,则可以把OKpush_Callback的代码并入到popupmenu_Callback的后面;

如果按OK按钮才显示新图像,则可以把popupmenu_Callback的代码并入到OKpush_Callback的前面。

 

写了这么多,希望对楼主有帮助。满意的话请采纳,若有疑问可继续追问。

imsubtract是图像处理工具箱自带的函数,但你把自己写的脚本也保存成imsubtractm了,导致遮盖了原来的函数。把你的文件改名就可以了(注意在资源管理器里面改,不要在编辑器里面另存)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13494108.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存