csharp编写界面,调用基于opencv的图像处理类库,是解决一类问题的优良方法。经过不懈研究,有最新进展:
String^ Class1::Method(cli::array<unsigned char>^ pCBuf1)
{
pin_ptr<System::Byte> p1 = &pCBuf1[0];
unsigned char* pby1 = p1;
cv::Mat img_data1(pCBuf1->Length,1,CV_8U,pby1);
cv::Mat img_object = cv::imdecode(img_data1,IMREAD_UNCHANGED);
//////////////////////////////////处理过
cvtColor(img_object,img_object,40);
////////////////////////////////////////////////////////////////////
if (!img_object.data)
return nullptr;
//获得目录,保存文件
cv::imwrite("c:/strDst.jpg",img_object);
return "c:/strDst.jpg";
}
class GOCsharpHelper
{
Class1 client = new Class1();
string strResult = null;
//输入参数是string或bitmap
public Bitmap ImageProcess(string ImagePath){
Image ImageTemp = Bitmap.FromFile(ImagePath);
return ImageProcess(ImageTemp);
}
//输出结果是bitmap
public Bitmap ImageProcess(Image image)
{
MemoryStream ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] bytes = ms.GetBuffer();
strResult = client.Method(bytes);
Image ImageResult = Bitmap.FromFile(strResult);
return (Bitmap)ImageResult;
}
public void Clear()
{
if(File.Exists(strResult))
File.Delete(strResult);
}
}
private void button2_Click(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
pictureBox1.Image.Dispose();
Image image = gocsharphelper.ImageProcess(" E:/sandbox/logo.jpg");
pictureBox1.Image = image;
}
原文:http://www.cnblogs.com/jsxyhelu/p/6291454.html