c# 在网页上给一张人脸图片的眼睛和z嘴巴 画点(已知道点的位置) 并输出这张图片 求大神解答!可给高分

c# 在网页上给一张人脸图片的眼睛和z嘴巴 画点(已知道点的位置) 并输出这张图片 求大神解答!可给高分,第1张

你已经绘制出矩形了,点的位置也知道了,在矩形绘制完后把点绘出来就是。

gDrawRectangle

gDrawEllipse

原始的opencv是用c++写的,于是你的问题就是怎样从C#中调用c++

这个的主要步骤是为c++的类或者

结构体

定义net中等价的类或结构体,然后会c++中的函数定义net中的方法,并且将后者关联到dll中的某个入口上。具体的不多写了,如果只是简单的c#调用c++,那么网上例子很多。不过如果是opencv这种复杂的库,可能会遇到额外的麻烦。

最后,为了防止你可能产生的某些误会,我想说的是,EmguCV是在opencv之上包了一层net的API,你想做的工作其实只是自己去实现一个EmguCV工程。如果你问这个问题的意图是想得到一种方法,使得你在c#端执行opencv的方式有本质改变(比如以至于有一个性能的提升)的话,那么你可能不会得到目的。

Image<Bgr, Byte>[] sources;

OpenFileDialog open = new OpenFileDialog();

openCheckFileExists = true;

openMultiselect = true;

openFilter = "打开|jpg";

openShowDialog();

sources=new Image<Bgr,byte>[openFileNamesLength];

for (int i = 0; i < openFileNamesLength; i++)

{

sources[i] = new Image<Bgr, byte>(openFileNames[i]);

}

pictureBox1Image = sources[0]Bitmap;

pictureBox2Image = sources[1]Bitmap;

pictureBox3Image = sources[2]Bitmap;

Stitcher stitcher = new Stitcher(true);

Image<Bgr, byte> result = stitcherStitch(sources);

pictureBox4Image = resultBitmap;

可以用C++调用openCV写成dll,接收camera数据给C#调用。后来感觉有点复杂就转而使用EmguCV了。

但是使用中发现两个bug,其一是无法得到摄像头的名字(这个可以通过C#本身枚举系统设备实现,但是这之后还是遇到一个bug,摄像头名字跟编号不对应,有两个摄像头的话,用VidioCapture打开后是另外一个),其二是通过使用SetCaptureProperty方法修改摄像头参数时无效,网上搜了半天竟然没有人遇到类似问题,也无无从解决,真是莫名其妙。

又考虑到后续还有很多图像处理工作要用OpenCV,在C#里通过EmguCV调用效率恐怕也难以保证。

1、首先保证的电脑已经装好了openCV,并且保证环境变量已经设置好。具体参照OpenCV官方中文网站,写得很清楚。2、下载EmguCV压缩包,其实就是几个可以在VisualStudio2005/2008中引用OpenCV的函数的dll库。下的是150版,“EmguCVWindowsBinary-1500zip”。解压该压缩包,并把其DLL拷贝在OpenCV安装目录下的Bin文件夹里。3、新建一个c#窗体应用程序,添加Bin目录下“EmguCVdll”,“EmguUtildll”等DLL的引用,还有些窗体的控件,主要是将EmguCVUIdll加入工具箱中,加入後会出现ImageBox、HistogramCtrl。4、然后,再程序的开头中加上usingEmguCV;usingEmguUtil;等命名空间之后就可以用EmguCV中所有的库函数了。

public void PtrProcess(Mat img)

{

///要使用指针遍历需要预先知道Mat矩阵元素的类型,通常使用的是Cv8U(unchar) 在C#里面对应byte,其他类型的对应关系见DepthType的枚举注释

if (img == null || imgIsEmpty || imgDepth != DepthTypeCv8U) throw new ArgumentException("img is unvalid!");

int rows = imgRows, cols = imgCols, step = imgStep;

unsafe

{

byte dataptr = (byte)imgDataPointer;

///单通道图像遍历方式

if (imgNumberOfChannels == 1)

{

for (int i = 0; i < rows; i++)

{

for (int j = 0; j < cols; j++)

{

int index = i step + j;

///get

byte getvalue = dataptr[index];

///set

byte setvalue = 127;

dataptr[index] = setvalue;

}

}

}

///多通道图像遍历方式,以BGR图像为例

else

{

int chns = imgNumberOfChannels;

for (int i = 0; i < rows; i++)

{

for (int j = 0; j < cols; j++)

{

///B,G,R 顺序 c= 0,1,2;

for (int c = 0; c < chns; c++)

{

int index = i step + j chns + c;

///get

byte getvalue = dataptr[index];

///set

byte setvalue = 127;

dataptr[index] = setvalue;

}

}

}

}

}

}

以上就是关于c# 在网页上给一张人脸图片的眼睛和z嘴巴 画点(已知道点的位置) 并输出这张图片 求大神解答!可给高分全部的内容,包括:c# 在网页上给一张人脸图片的眼睛和z嘴巴 画点(已知道点的位置) 并输出这张图片 求大神解答!可给高分、如何在C#中使用原始的OpenCV,不是EmguCV、Emgu CV 图像拼接或者用其他方法在C#如何实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9477330.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存