2009-10-20 31 views
6

tôi tự hỏi liệu có cách nào dễ dàng chuyển đổi hình ảnh mảng nổi của tôi thành iplimage, có thể được xử lý bởi opencv. Tất nhiên tôi có thể tạo ra một iplimage rỗng với kích thước tương tự và chỉ cần sao chép từng điểm ảnh từ hình ảnh mảng float của tôi đến iplimage emplty, nhưng có giải pháp thanh lịch hơn cho việc này. Có lẽ phương pháp tiêu thụ bộ nhớ ít tốn kém hơn, vì hình ảnh nguồn khá lớn và quá trình sao chép sẽ mất một thời gian.Chuyển đổi hình ảnh mảng float thành định dạng có thể sử dụng cho opencv

Trân trọng,

Zhengtonic

Trả lời

3

Bạn có thể làm một cái gì đó như thế này (giả sử nổi 32 bit):

float* my_float_image_data; 

CvSize size; 
size.height = height ; 
size.width = width; 
IplImage* ipl_image_p = cvCreateImageHeader(size, IPL_DEPTH_32F, 1); 
ipl_image_p->imageData = my_float_image_data; 
ipl_image_p->imageDataOrigin = ipl_image_p->imageData; 
+0

Cảm ơn pal! Điều này sẽ làm việc ra. :) – zhengtonic

+0

Tài liệu OpenCV nói rằng IplImage-> imageData thuộc loại char. Trong ví dụ này là một mảng float - nó hoạt động như thế nào. Ngoài ra, tôi tự hỏi, nếu dữ liệu hình ảnh là một mảng 2D hoặc nếu nó phẳng thành 1D? – freakTheMighty

+0

@freakTheMighty Dữ liệu được lưu trữ trong một mảng char, nhưng mỗi 4 byte được hiểu là một phao. Trong C là có thể :). Xem http://www.comp.leeds.ac.uk/vision/opencv/iplimage.html để có mô tả tốt. –

1

Bạn có thể điền một cấu trúc iplimage 'bằng tay' để mô tả mảng của bạn, theo ý kiến ​​here.

Hình ảnh trườngData sẽ trỏ đến mảng ban đầu của bạn.

Nhưng sau đó không sử dụng chức năng deallocation trên đó. Chỉ cần xóa cấu trúc cuối cùng.

Các vấn đề liên quan