emgucv怎么切割图像
『壹』 如何使用emgucv 读取 kinect彩色影像 使用wpf
http://www.dotblogs.com.tw/v6610688/archive/2013/10/28/emgucv_kinectsdk_wpf.aspx
这是Kinect v1的。你翻墙down 那两个工具类,然后修改 Kinect sdk带的 ColorBasic-WPF 示例代码。
我瞎胡改的,要想会用 还是得去熟悉EmguCV。
//转型成EMGU用
Image<Bgr, Byte> convertImage = colorFrame.ToOpenCVImage<Bgr, Byte>();
Image<Gray, Byte> grayFrame = convertImage.Convert<Gray, Byte>();
Image<Gray, Byte> cannyFrame = grayFrame.Canny(100.0, 60.0);
Image.Source = cannyFrame.ToBitmapSource();
colorBitmap.WritePixels(new Int32Rect(0, 0, sensor.ColorStream.FrameWidth, sensor.ColorStream.FrameHeight), colorPixels, this.colorBitmap.PixelWidth * sizeof(int), 0);
『贰』 emgucv on C# 怎么实现鼠标拖拽出一块区域进行裁剪
首先把控件的AllowDrop设成true然后在DragEnter事件设置要接收的数据格式比如内if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
{ e.Effect = DragDropEffects.All; } 然后再DragDrop事件,设置文容本就行了比如string fileName = ((string[])e.Data.GetData(DataFormats.FileDrop))[0];
textBox1.Text = fileName;
『叁』 如何在Emgucv使用指针快速遍历图像
public void PtrProcess(Mat img)
{
///要使用指针遍历需要预先知道Mat矩阵元素的类型,通常使用的是Cv8U(unchar) 在C#里面对应byte,其他类型的对应关系见DepthType的枚举注释
if (img == null || img.IsEmpty || img.Depth != DepthType.Cv8U) throw new ArgumentException("img is unvalid!");
int rows = img.Rows, cols = img.Cols, step = img.Step;
unsafe
{
byte* dataptr = (byte*)img.DataPointer;
///单通道图像遍历方式
if (img.NumberOfChannels == 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 = img.NumberOfChannels;
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;
}
}
}
}
}
}
『肆』 使用EmguCV中的Stitcher函数进行图像拼接报错
问题解决了吗?我也遇到了不知道怎么办,求解。怎么联系
『伍』 Emgu CV 图像拼接或者用其他方法在C#如何实现
Image<Bgr, Byte>[] sources;
OpenFileDialog open = new OpenFileDialog();
open.CheckFileExists = true;
open.Multiselect = true;
open.Filter = "打开图片|*.jpg";
open.ShowDialog();
sources=new Image<Bgr,byte>[open.FileNames.Length];
for (int i = 0; i < open.FileNames.Length; i++)
{
sources[i] = new Image<Bgr, byte>(open.FileNames[i]);
}
pictureBox1.Image = sources[0].Bitmap;
pictureBox2.Image = sources[1].Bitmap;
pictureBox3.Image = sources[2].Bitmap;
Stitcher stitcher = new Stitcher(true);
Image<Bgr, byte> result = stitcher.Stitch(sources);
pictureBox4.Image = result.Bitmap;
『陆』 C#EmguCV 中ImageBox自带鼠标操作功能可否去掉
一般需要重写OnMouseClick和OnClick之类的触发事件的方法,去掉里面的左键处理
或者继承一下,在构造函数中校正注册的事件,清空imgbox原先的Click事件链,并将MouseClick 右键的处理加进去
『柒』 opencv或emgucv 如何背景建模之后,用别的图片来替代背景......
比较复杂,<学习OPENCV>这本书有类似的例子,可以参考,不建议初学者上来就弄这么难得
『捌』 Emgu CV 图像拼接或者其他方法在C#实现
下载个EmguCV的源代码,然后自己build一下就可以咯
如果你一定要用C#的话,EmguCV是比较好的选择,但是资料不太好找。用C++的话OpenCV的资料就很多了,你自己考虑吧
『玖』 OpenCV和Emgu CV什么关系
Emgu CV是.NET平台下对OpenCV图像处理库的封装,也就是.NET版的OpenCV。两者的版本的话,你可以版看一下你的Emgu CV安装文件里面的权bin文件夹(我的是D:\Emgu\emgucv-windows-x86 2.2.1.1150\bin)下引用的OpenCV的dll,可以由此判断出封装的是哪个版本。比如我的里面的opencv_core220.dll应该对应的OpenCV的2.2版本,所以封装的应该就是这个版本。这是我的理解,你可以参考一下。
『拾』 EmguCV学习 与opencv的区别和联系
openCV是因特尔的一个开源的视觉库,里面几乎包含了所有的图像处理的经典算法,并且采用C和少量的C++编写,运行效率很高,对于做图像处理这方面工作的,认识opencv是必须的工作。不过opencv有个很大的不足,这在于它几乎没有提供gui这方面接口,很难满足目前应用程序开发的需要,而万恶的MFC框架丑陋的界面也成为了我的噩梦,MFC与opencv和界面优化几乎让我在图像处理这一块儿无法动弹。
C#是.net平台上的明星语言,可以很容易做出漂亮的界面。EmguCV是将opencv封装的一个.net库可以被VC++,VC#,VB.net调用。网上对于EmguCV的介绍很少,不是因为它没用,而是因为它的使用方法几乎和opencv一摸一样,opencv的资料完全可以直接用于EmguCV。不过不少新手在使用EmguCV在使用几次之后便放弃。这有以下几个原因:
1.舆论影响,很多人都说C#的运行效率低,采用C/C++,opencv是C和C++编写的,理所当然应该在VC++中运行,图像处理又是一个计算量很大的工作,C#不行。C#运行效率肯定比C/C++差,但是采用混合编程的方法就可以啦,用C#的框架和运行机制,计算交给C就好啦。EmguCV很多处理函数都是采用托管调用opencv。这个在EmguCV的安装包里可以看到,里面含有所有Opencv的dll。
2.缺少资料,学习受挫而放弃(我放弃这个大概有半年)。不得不承认EmguCV方面的学习资料实在是太少啦。很多时候出现问题,在网上基本上找不到答案。而且EmguCV前期版本对opencv封装不全面,很多基本的函数没有被封装,使用起来很不方便,网上很多人以讹传讹,编写很困难。不过使用2.3版本就没有这个问题,opencv基本函数都得到了很好的封装。opencv图像处理的函数都封装在cvInvoke中。
而Image<>结构是连接opencv与emgucv的重要桥梁。其中C#的Intptr类型可以很好地传递IplImage*指针结构,下面我用一个实验来验证我的判断。
创建一个winform工程,添加一个button和picturebox控件
当然如果只是简单的canny算法,使用EmguCV封装的结构Image<>更加简单,将代码如下图所示修改