你已经绘制出矩形了,点的位置也知道了,在矩形绘制完后把点绘出来就是。
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#如何实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)