2010-06-01 36 views
9

Tôi mới sử dụng EmguCV. Tôi muốn chuyển đổi một hình ảnh rgb thành thang màu xám. Đối với việc chuyển đổi Tôi đã sử dụng mãChuyển đổi sang màu xám bằng cách sử dụng emguCV trong C#

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

Bây giờ khi tôi biên dịch mã này trong C# nó mang lại cho không có lỗi, nhưng khi tôi chạy nó sau đó sau một vài giây nó mang lại cho tôi những ngoại lệ ở dòng này của mã này loại chuyển đổi không được OpenCV hỗ trợ. Bây giờ bất kỳ ai có thể giúp tôi giải quyết vấn đề này.

Trân Amal

+0

Câu trả lời của Tom Wright phù hợp với tôi. Nếu nó làm việc cho bạn, xin vui lòng chấp nhận câu trả lời. – Chad

Trả lời

12

Nó có thể phụ thuộc vào loại màu ColordImage là.

Ví dụ, công trình này:

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

Nếu bạn có thể cung cấp thêm các mã của bạn, nó có thể trở nên rõ ràng hơn những gì đang xảy ra.

4

Cách khác, nếu bạn không muốn sử dụng Convert (ví dụ như trong trường hợp của bạn ColoredImage là một số kiểu dữ liệu khác như IntPtr), có rất nhiều nhà xây dựng sẵn như:

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

Đây là một đầy đủ danh mục:
http://www.emgu.com/wiki/files/2.1.0.0/html/cb45d54d-ebce-44b6-0352-3e1105c0862a.htm

Ngoài ra còn có một số ví dụ khác (bao gồm cả việc sử dụng Chuyển đổi) trên Wiki emgu: http://www.emgu.com/wiki/index.php/Working_with_Images

5

Bạn nên dán opencv_imgproc220.dll (nếu bạn sử dụng emgu cv 2.2.1.1150) vào thư mục bin/debug dự án của bạn.

+2

Câu trả lời này có vẻ ngu ngốc nhưng câu trả lời đúng của nó. Tôi đã kiểm tra ColordImage.Convert() trong ILSpy, hàm sử dụng Image.ConvertColor() có chứa khối try/catch để nắm bắt mọi thứ, bao gồm cả lỗi tải dll. – Markos

3

Một cách đơn giản là chuyển Bitmap của hình ảnh màu trong hàm tạo;

Image<Bgr, byte> inputImage = //your original bgr image 
Image<Gray, Byte> result = new Image<Gray,byte>(inputImage.Bitmap); 
Các vấn đề liên quan