2010-06-01 34 views
9

Soy nuevo en EmguCV. Quiero convertir una imagen rgb en escala de grises. Para la conversión He utilizado el códigoConversión a escala de grises usando emguCV en C#

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

Ahora, cuando i compilar este código en C# da ningún error, pero cuando lo ejecuto a continuación, después de unos segundos me da la excepción a esta línea de código que esta tipo de conversión no es compatible con OpenCV. Ahora alguien puede ayudarme a resolver este problema.

Regards Amal

+0

La respuesta de Tom Wright funcionó para mí. Si le funcionó, acepte la respuesta. – Chad

Respuesta

12

Esto puede depender del tipo de color que ColordImage es.

Por ejemplo, esto funciona:

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

Si se pudiera suministrar más de su código, que podría ser más evidente lo que está pasando.

4

Como alternativa, si no desea utilizar Convert (por ejemplo, en caso de que su ColoredImage es algún otro tipo de datos, como IntPtr), hay numerosos constructores disponibles, tales como:

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

Aquí es un servicio completo lista:
http://www.emgu.com/wiki/files/2.1.0.0/html/cb45d54d-ebce-44b6-0352-3e1105c0862a.htm

también hay algunos ejemplos más (incluyendo el uso de convertir) en el wiki de emgu: http://www.emgu.com/wiki/index.php/Working_with_Images

5

Debería pegar opencv_imgproc220.dll (si usa emgu cv 2.2.1.1150) en la carpeta bin/debug del proyecto.

+2

Esta respuesta parece estúpida, pero es la respuesta correcta. Comprobé ColordImage.Convert() en ILSpy, la función utiliza Image.ConvertColor() que contiene el bloque try/catch que captura todo, incluidos los errores de carga dll. – Markos

3

Una forma simple es pasar BitMap de la imagen en color en el constructor;

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