Tôi cần chuyển đổi IplImage 8 bit thành IplImage 32 bit. Sử dụng tài liệu từ khắp nơi trên web Tôi đã thử những điều sau đây:Làm thế nào để chuyển đổi một OpenCV IplImage 8-bit * thành IplImage 32-bit *?
// general code
img2 = cvCreateImage(cvSize(img->width, img->height), 32, 3);
int height = img->height;
int width = img->width;
int channels = img->nChannels;
int step1 = img->widthStep;
int step2 = img2->widthStep;
int depth1 = img->depth;
int depth2 = img2->depth;
uchar *data1 = (uchar *)img->imageData;
uchar *data2 = (uchar *)img2->imageData;
for(h=0;h<height;h++) for(w=0;w<width;w++) for(c=0;c<channels;c++) {
// attempt code...
}
// attempt one
// result: white image, two red spots which appear in the original image too.
// this is the closest result, what's going wrong?!
// see: http://files.dazjorz.com/cache/conversion.png
((float*)data2+h*step2+w*channels+c)[0] = data1[h*step1+w*channels+c];
// attempt two
// when I change float to unsigned long in both previous examples, I get a black screen.
// attempt three
// result: seemingly random data to the top of the screen.
data2[h*step2+w*channels*3+c] = data1[h*step1+w*channels+c];
data2[h*step2+w*channels*3+c+1] = 0x00;
data2[h*step2+w*channels*3+c+2] = 0x00;
// and then some other things. Nothing did what I wanted. I couldn't get an output
// image which looked the same as the input image.
Như bạn thấy tôi không thực sự biết mình đang làm gì. Tôi rất muốn tìm hiểu, nhưng tôi sẽ thích nó hơn nếu tôi có thể thực hiện điều này một cách chính xác. Cảm ơn bạn đã giúp tôi!
Có một số thông tin thú vị trên trang đó, mẩu mã mà giải thích những gì tôi đã Tuy nhiên, kết quả cũng giống nhau. Vui lòng xem liên kết sau để biết ví dụ về sự cố xảy ra mọi lúc: http://files.dazjorz.com/cache/conversion.png – sgielen
whoa, yeah, đó là tốt nhất, bạn nói đúng! Vì vậy, nó cho manh mối sau đây: cho các đốm đỏ, R là 1.0 và GB là 0.0, và cho màu trắng, cả ba đều là 1.0.Vì vậy, trong khi chuyển đổi, các giá trị RGB shoul d được chuyển đổi từ 0 đến 255 thành 0.0 thành 1.0. Thay đổi giá trị thành b/255 làm cho hình ảnh có màu đen + đỏ. – sgielen
OK! int b = ((uchar *) (img-> imageData + h * img-> widthStep)) [w * img-> nChannels + 0]; // B ((float *) (img2-> imageData + h * img2-> widthStep)) [w * img2-> nChannels + 0] = ((phao) b)/255,0; – sgielen