首先学习下各参数的用法,以后慢慢完善: 一 origin
imageData指向存储图像数据的一块数据区。这块数据区虽然是被声明为char类型的,但是其也可以引用其他类型的数据。 例如声明一个图像,长宽为100,100,深度为32位的float型,灰度图像。 IplImage* Img = cvCreateImage(cvSize(100,100), IPL_DEPTH_32F, 1); 那么我们可以通过调试查看实际的内存分配空间为40000 = 100*100*(32/8)。也就是说实际上是分配了10000个float型的内存区域。 以前总是不知道为什么,从摄像头录入的视频帧,显示在窗口上很正常,但是用来进行数据计算时总要先垂直翻转一下。为此,在涉及图像中坐标的计算中,出过不少错。 现在终于明白了,OpenCV中的图像结构有个很重要的成员origin,它指明了图像的原点位置,可以有两种取值:IPL_ORIGIN_TL和IPL_ORIGIN_BL,其中TL意思是:TopLeft,即左上;BL意思是:BottomLeft,即左下。其实这两个都是整形常量,IPL_ORIGIN_TL就是0,IPL_ORIGIN_BL就是1。 经验证,从摄像头取回的图像的坐标原点是在左下角,即origin值是1。所以在计算前,一定要明确图像的坐标原点位置,否则就会出错。《学习OpenCV中文版》49页也特别强调了:计算机视觉领域,一个重要的错误来源就是原点位置的定义不统一。 |
|