数据结构操作与运算-CvRect,CvBox2D数据结构

风在竹林 posted @ 2009年8月09日 00:23 in OpenCV with tags OpenCV数据结构操作与运算 , 7143 阅读

这两个数据结构都是OpenCV,ROI专用的数据结构,ROI,全名的意思就是感兴趣的区域(Region Of Interesting),对于图像来讲,总是有一些物体或是重要的图像是我们必须要做研究,追踪或分析的,物体追踪在图像处理也是很大的一们领域,凡是人脸追踪,汽车追踪,鸟类追踪,或是图像检索都是可以利用ROI的数据结构做例子的,而研究或分析的部分,则是对感兴趣的区域实例特殊的算法,或是对它做纹理或特征分析,再信息比对上面会得到很大的帮助.而CvRect数据结构则是画方框,CvBox2D则是椭圆形的制作,一般感兴趣区域算法都是用方框 CvRect来做实例,CvBox2D则是在OpenCV用人脸椭圆追踪比较用的到.

CvRect数据结构ROI实例

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main()
{
        IplImage *Image1;
        IplROI ROI;
        CvRect Rect1,Rect2;
        Image1=cvLoadImage("coast.jpg",1);
        Rect1=cvRect(176,186,14,22);//坐标值根据手动标定来确定
        ROI=cvRectToROI(Rect1,0);
        Image1->roi=&ROI;

        Rect2=cvROIToRect(*Image1->roi);

        cvNamedWindow("Coast(Region Of Interesting)",1);
        cvShowImage("Coast(Region Of Interesting)",Image1);

        Image1->roi=NULL;
        cvRectangle(Image1,cvPoint(176,186),cvPoint(176 + 14,186 + 22),CV_RGB(255,0,0),1,8,0);
        cvNamedWindow("Coast",1);
        cvShowImage("Coast",Image1);

        cvWaitKey(0);
}
 



原始图片:


执行结果:


这 张图片则是简单的实例撷取感兴趣的区域,图中唯一的小人被cvRect数据结构配置,传给IplImage数据结构而被抓到了,这只是一个简单的手动抓人 物的实例.这边ROI的制作方式有很多种,这边只是其中一种的介绍,之后还会有ROI相关的函数应用,在这张图片内,利用cvRect()撷取感兴趣位置 的坐标,以及他的区块大小,前两个参数是坐标,后两个是宽跟高,再将cvRect数据结构用cvRectToROI()转成IplROI格式,然后直接给 IplImage数据结构内的ROI,而Rect2的实例也只是把IplROI结构转换成CvRect的数据结构罢了,而如果把IplImage数据结构 的ROI配置成NULL,那又会回到原图影像大小了,在这边cvRectToROI()的第二个参数是COI(Color Of Interesting)感兴趣的信道颜色,而在OpenCV的cvShowImage()没有被实例出来,而它还是在其他算法函数上被用的到.

(1)CvRect数据结构


(2)IplROI数据结构,其实与CvRect长的很像


以下是CvBox简单的介绍

CvBox数据结构实例
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h>


int main()
{
    CvPoint2D32f Point1 =cvPoint2D32f(200,200);
    CvSize2D32f Size1 = cvSize2D32f(50,50);
    CvBox2D Box1;

    Box1.center=Point1;
    Box1.size=Size1;
    Box1.angle=90;

    printf("Box Point is :(%.1f,%.1f)\n",Box1.center.x,Box1.center.y);
    printf("Box Size is : (%.1f,%.1f)\n",Box1.size.width,Box1.size.height);
    printf("Box Angle is : %.1f\n",Box1.angle);
    system("pause");
}

执行结果:



CvBox 是由CvPoint2D32f数据结构跟CvSize2D32f数据结构所组成的,还有加上float类型的角度信息,这里只能简单的介绍它,因为 CvBox的应用很少,比较能用到的就是人脸椭圆形ROI的部分,而CvBox自身也没有自己可以初始化数据结构的函数以及OpenCV提供的其他子函数,有在用函数为cvCamShift(),cvMinAreaRect()及cvFitEllipse().



cvRect()
初始化CvRect()数据结构,输入的参数为X坐标,Y坐标,宽度大小,高度大小
cvRect(X坐标数据,Y坐标数据,宽度数据,高度数据)

cvRectToROI()
将CvRect转换成IplROI格式,也可以直接跟IplImage数据结构的ROI链结,所需输入的参数为,CvRect数据结构,信道数,信道数被定义为0为不选取,1为信道一,2为信道二,以此类推
cvRectToROI(CvRect数据结构,信道数据)

cvROIToRect()
将IplROI转换成cvRect格式,也可以直接拿IplImage的ROI做转换,需要输入IplROI数据结构
cvROIToRect(IplROI数据结构)

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter