当前位置:  开发笔记 > 编程语言 > 正文

如何将8位OpenCV IplImage*转换为32位IplImage*?

如何解决《如何将8位OpenCVIplImage*转换为32位IplImage*?》经验,为你挑选了2个好方法。

我需要将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是白色.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有