最近在实现GVF snake,其中要对读取的图像求解GVF力场。图像以灰度模式读进来之后(IPL_DEPTH_8U),要进行归一化处理,转化成深度为IPL_DEPTH_32F的图像,但是现实不正常。google到了这篇文章 OpenCV对不同图像深度的处理 ,文章中对opencv里面的不同图像深度进行了分析和测试。如下:
测试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_DEPTH_16U
测试char型:-128--127之间 IPL_DEPTH_8S
测试unsigned char型:0--255之间 IPL_DEPTH_8U
在进行不同深度图像间进行转换的时候,如果只是调用cvScale()函数的话,用cvShowImage()来显示图像会不正常。调用过cvScale()之后,要将转换过后的图像进行处理,才能正常的用cvShowImage()函数显示。如下代码显示了从IPL_DEPTH_8U转换到IPL_DEPTH_32F后显示。经归一化处理后便可正常显示。也可用其他方法进行处理,这里使用归一化是因为后面要用到图像的归一化,我这里就顺便贴了归一化的代码。
ps: 优快云上下载的那个gvf snake c++的代码有点问题,根本不能收敛到凹区域,增加迭代次数后也不能收敛到凹区域。而且CvSepFilter在2.1版本中也找不到,用cvFilter2D()替换了CvSepFilter,问题仍不能得到解决。且cvSobel()处理edge map时会有溢出。
预计GVF snake最近一个月能够实现。
小抱怨一下,这学期课多,导师催的也紧,图像处理也是刚刚接触。能逃的课都逃了,逃课都成了习惯,不知最后期末考试成绩会是个什么样。