您的位置:首页 > 编程语言 > ASP

在Azure上通过asp.net使用EmguCV

2016-05-18 01:34 471 查看
我使用的环境为emgucv3.0+vs2015

我现在用的是之前数据库大作业用到的一个webservice 没建新的。

首先需要在vs里创建一个asp.net Web应用程序 模板选Empty

然后添加一个webservice。

由于在程序和webservice之间传递Bitmap貌似有点问题,所以我这里是将他们转换为byte的数组来传递的。

先添加那几个emgucv的dll文件的引用,接着写入代码

[WebMethod]
public byte[] emgu(byte[] a)
{
MemoryStream ms1 = new MemoryStream(a);
Bitmap bm = (Bitmap)Image.FromStream(ms1);
ms1.Close();
Image<Bgra, byte> b = new Image<Bgra, byte>(bm);
var c = b.Convert<Gray, byte>();
MemoryStream ms = new MemoryStream();
c.Bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes = ms.GetBuffer();
ms.Close();
return bytes;
}


只是一个将图片转为灰度图的测试程序

然后在解决方案中新建两个文件夹 叫x86和x64,并把emgucv安装目录下bin文件夹下的x86和x64文件夹内的内容复制过去



然后右键发布解决方案





我这用的是我之前就建好的一个应用程序服务,如果之前没有建过,在这里应该需要新建一个

然后一路下一步, 到最后点下发布就好了。

接着还要把那两个文件夹给传到服务器上去,同样是右键文件夹,然后发布





接着就要进一下你的azure的控制台了,因为发布文件夹默认在这个服务的根目录,我们需要把它移到程序的执行文件所在的文件夹



一次点开,打开控制台

使用 ls 命令可以看到当前目录的所有文件夹(其他的那些dll文件都是我之前测试传上去的)



只要把x64 和x86这两个文件夹移到bin内就可以了

先在bin内创建两个文件夹,然后返回此目录,将文件复制过去

依次输入

cd bin
mkdir x86
mkdir x64
cd ..
xcopy x86 bin\x86
xcopy x64 bin\x64


然后记一下网址,在这。



然后新建一个winfrom应用程序

在项目选项卡里选择添加服务引用



将那个网站复制过去,然后加上 \ 后面跟着你建的那个webservice的名字,如果是默认的,那就是WebService1.asmx

加起来就会看起来是这样的

http://xxxxxx.azurewebsites.net/WebService1.asmx


然后点击转到



再确定就可以了

我在这个程序里放了一个button和一个PictureBox

代码如下

全部都是默认名称。

namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
ServiceReference1.WebService1SoapClient a = new ServiceReference1.WebService1SoapClient();
Bitmap b = new Bitmap("0a0a5820d572a6a43adfcbf18af7c39b.jpg");
public Form1()
{
InitializeComponent();
pictureBox1.Image = b;
}

private void button1_Click(object sender, EventArgs e)
{
MemoryStream ms = new MemoryStream();
b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes = ms.GetBuffer();
ms.Close();
var c = a.emgu(bytes);

MemoryStream ms1 = new MemoryStream(c);
Bitmap bm = (Bitmap)Image.FromStream(ms1);
ms1.Close();
pictureBox1.Image = bm;
}
}
}


接着还要修改下App.config

否则会出现 “已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。”的报错

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="WebService1Soap" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://marketmanager.azurewebsites.net/WebService1.asmx"
binding="basicHttpBinding" bindingConfiguration="WebService1Soap"
contract="ServiceReference1.WebService1Soap" name="WebService1Soap" />
</client>
</system.serviceModel>
</configuration>


其中这部分有修改

<binding name="WebService1Soap" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>


最后直接运行就可以了



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: