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

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

这两个数据结构都是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数据结构)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值