在处理一些需要图像相加运算的操作时,通常定义
IplImage* dst = cvCreateImage(cvGetSize(img),IPL_DEPTH_64F,img->nChannels);
当处理完成后,需要对原这个IPL_DEPTH_64F深度的图像进行显示的时候,就需要做一些转换。可以用cvScale()这个函数,这个函数主要是对图像做线性变换。如果不转换的话,可以发现显示的图像是全白的。这是由于IPL_DEPTH_64F类型的图片显示范围为[0,1]。
cvMinMaxLoc(dst, &m, &M, NULL, NULL, NULL);
cvScale(dst, dst, 1.0/(M-m), 1.0*(-m)/(M-m));//图像数据转换到[0,1]区间
这个时候就可以正常的显示图像了。当需要在不同深度的图像之间转换时,也可以用cvScale()这个函数。这个时候的转换,中间有个截断处理过程。比如IPL_DEPTH_64F到IPL_DEPTH_8U,就会把300转换到255。下面转一段别人总结的深度显示范围。
测试double型:0.0--1.0之间 IPL_DEPTH_64F
测试float型:0.0--1.0之间 IPL_DEPTH_32F
测试long型:0--65535之间 IPL_DEPTH_32S
测试short int型:-32768--32767之间 IPL_DEPTH_16S
测试unsigned short int型:0--65535之间 IPL_
OpenCV对不同图像深度的处理
最新推荐文章于 2024-07-16 10:30:27 发布
本文介绍了在OpenCV中处理图像深度转换的过程,特别是从IPL_DEPTH_64F到其他深度的转换。通过使用cvScale()函数,将64位浮点型图像调整到适合显示的范围,并提供了代码示例进行图像加法操作和显示。
摘要由CSDN通过智能技术生成