我需要将8位IplImage转换为32位IplImage.使用来自整个网络的文档,我尝试了以下方法:
// 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如你所见,我真的不知道自己在做什么.我很想知道,但如果我能正确完成这项工作,我会更加喜欢它.谢谢你的帮助!
1> Martin..:您正在寻找的功能是cvConvertScale().它会自动为您进行任何类型转换.您只需要指定要缩放1/255(将范围[0 ... 255]映射到[0 ... 1]).
例:
IplImage *im8 = cvLoadImage(argv[1]); IplImage *im32 = cvCreateImage(cvSize(im8->width, im8->height), 32, 3); cvConvertScale(im8, im32, 1/255.);注意点
1/255.
- 强制进行双重划分.没有它你会得到0的标度.
将double作为缩放因子传递是很重要的(这就是255后面有'.'的原因).1/255将评估为整数除法,并导致缩放因子为0.您的代码究竟与cvConvertScale()无关?
2> Stefan Schmi..:也许这个链接可以帮到你?
编辑响应OP和评论的第二次编辑
你有没有尝试过
float value = 0.5
代替
float value = 0x0000001;
我认为浮动颜色值的范围从0.0到1.0,其中1.0是白色.