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<>更加簡單,將代碼如下圖所示修改