1. 關於EmguCV中的KinectCapture怎麼使用
只能kinect專用設備。一般的webcamera無法替代。
因為kinect除了攝像頭還帶紅外監測。
1.確保你只是使用了Kinect的深度數據。
2.如果你使用的了kinect的骨骼數據,最好確認下這個kinect的骨骼數據是從深度數據中提取的,不知道你用的是哪個kinect sdk,現在有些網上演算法在進行骨骼矯正的時候用到了kinect的RGB 圖像,矯正了垂直深度圖像缺失的情況。
3.確保你的kinect的線程和你的外接攝像頭不再同一個線程,事實上現在的sdk理論上都說支持多個kinect,但是需要啟動不同線程。
4.據說(幾個月前看的了)有人測試說kienct工作的時候,你的外接攝像頭無法正常工作,不知道真的假的,不過理論上來說只要啟動不同線程應該沒什麼影響的。
2. 如何在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;
}
}
}
}
}
}
3. Emgu CV 圖像拼接或者其他方法在C#實現
下載個EmguCV的源代碼,然後自己build一下就可以咯
如果你一定要用C#的話,EmguCV是比較好的選擇,但是資料不太好找。用C++的話OpenCV的資料就很多了,你自己考慮吧
4. 如何在emgu CV中進行相機校準後訪問旋轉和平移向量
從一個不是很通俗易懂的方式說明一下 先從高數的函數列收斂說起: 1)設fn(x)(n=1,2,3,..)和f(x)是定義在區間D上的函數,若對D內任意一點x,都有 fn(x)-->f(x),則稱函數列fn(x)(n=1,2,3,..)在D上點點收斂到f(x) 2)但有時對於D上每一點x
5. EmguCV中的Image<TColor,TDepth>.Canny方法是怎麼定義的
兄弟,API裡面是這么寫的
Gray cannyThreshold = new Gray(180);
Gray cannyThresholdLinking = new Gray(120);
Gray circleAccumulatorThreshold = new Gray(120);
Image<Gray, Byte> cannyEdges = gray.Canny(cannyThreshold, cannyThresholdLinking);
6. 如何使用emgu CV找到與圖像中的任意角度的旋轉一個黑色的方形
圖像整體任意角度旋轉,就是一個像素一個像素的來的
你上面的效果是兩幅圖像的效果
你上面兩幅圖像的效果就是平常意義上的像素旋轉
只不過一幅圖像的時候我們用黑色區域代替 而樓主用另一個圖像代替
這不矛盾
也就是說旋轉超出邊界的部分用第二個圖像填充
就是你上面的效果
你如果編過旋轉 縮放 仿射等matlab函數,你就可以很快的達到你想要的效果
想matlab里的imrotate函數 你可以自己編編實現一下
7. Emgucv打開usb攝像頭的問題有沒有精通或者懂的,請進
在windows下檢查攝像頭驅動是否安裝完好,是否使用正常。可以通過查看驅動或者打開攝像頭進行確認。
如果第一步確認沒有問題,右鍵點擊我的電腦,選擇的電腦-》管理->服務-》找到Vmware Usb Arbitration service啟動它。啟動虛擬機,進入ubuntu操作系統,
點擊vmware player左上方的player菜單,選擇移動設備管理,從中選擇將camera給connect
打開shell終端,輸入sudo apt-get install cheese,安裝cheese工具,可能會提示需要輸入密碼,且需要一定的時間。
在shell中啟動cheese,就會自動打開攝像頭,如果想要關閉,就點擊關閉按鈕或者在shell中使用按鍵ctrl+c
使用cheese打開攝像頭後,可以通過點擊下方的按鈕,進行拍照,錄像等操作。
如果想要在windows中使用攝像頭就要和第三步一樣,選擇camear disconnect,將攝像頭的控制權返回給windows。
8. 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<>更加簡單,將代碼如下圖所示修改
9. c#emgucv怎樣接收rtsp
if (frame.IsEmpty)
return;
//顯示圖片 可以使用Emgu CV 提供的 ImageBox顯示視頻, 也可以轉成 BitmapSource顯示。