2010-06-01 120 views
9

我是EmguCV的新手。我想將RGB圖像轉換爲灰度。對於轉換我用的代碼在C中使用emguCV轉換爲灰度模式#

Image<Gray,byte> grayImage = ColordImage.Convert<Gray, byte>(); 

現在,當我編譯C#這個代碼它給沒有錯誤,但是當我幾秒鐘後,運行它,然後它給我的例外,在這行代碼,這OpenCV不支持類型的轉換。現在任何人都可以幫我解決這個問題。

問候 阿邁勒

+0

湯姆賴特的回答爲我工作。如果它適合你,請接受答案。 – Chad 2016-09-30 15:53:55

回答

12

這可能取決於顏色的類型ColordImage是。

舉例來說,這個工程:

Capture cap = new Capture(1); 
Image <Bgr,Byte> ColordImage = cap.QueryFrame(); 
Image <Gray,Byte> grayImage = ColordImage.Convert<Gray, Byte>(); 
imageBox1.Image = grayImage; 

如果你能提供更多的代碼,它可能會變得更加明顯發生了什麼事。

4

另外,如果你不想使用Convert(例如,在情況下,你ColoredImage一些其他的數據類型,如IntPtr的),有無數的構造等可作爲:

Image<Gray, byte> grayFrame = new Image<Gray, byte>(width, height, stride, imageData); 

這是一個完整的清單:
http://www.emgu.com/wiki/files/2.1.0.0/html/cb45d54d-ebce-44b6-0352-3e1105c0862a.htm

也有對emgu維基一些例子(包括轉換的使用):http://www.emgu.com/wiki/index.php/Working_with_Images

5

您應該將opencv_imgproc220.dll(如果您使用emgu cv 2.2.1.1150)粘貼到您的項目bin/debug文件夾中。

+2

這個答案看起來很愚蠢,但它的正確答案。我在ILSpy中檢查了ColordImage.Convert(),該函數使用Image.ConvertColor(),它包含捕獲所有內容的try/catch塊,包括dll加載錯誤。 – Markos 2012-11-09 20:19:14

3

一個簡單的方法是在構造函數中傳遞彩色圖像的BitMap;

Image<Bgr, byte> inputImage = //your original bgr image 
Image<Gray, Byte> result = new Image<Gray,byte>(inputImage.Bitmap);