织梦CMS - 轻松建站从此开始!

罗索

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

jackyhwei 发布于 2011-09-15 10:17 点击:次 
这两个数据结构都是OpenCV,ROI专用的数据结构,ROI,全名的意思就是感兴趣的区域(Region Of Interesting),对于图像来讲,总是有一些物体或是重要的图像是我们必须要做研究,追踪或分析的,物体追踪在图像处理也是很大的一们领域
TAG:

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

  1. #include <cv.h> 
  2. #include <highgui.h> 
  3. #include <stdio.h> 
  4.  
  5. int main() 
  6.         IplImage *Image1; 
  7.         IplROI ROI; 
  8.         CvRect Rect1,Rect2; 
  9.         Image1=cvLoadImage("coast.jpg",1); 
  10.         Rect1=cvRect(176,186,14,22);//坐标值根据手动标定来确定 
  11.         ROI=cvRectToROI(Rect1,0); 
  12.         Image1->roi=&ROI; 
  13.  
  14.         Rect2=cvROIToRect(*Image1->roi); 
  15.  
  16.         cvNamedWindow("Coast(Region Of Interesting)",1); 
  17.         cvShowImage("Coast(Region Of Interesting)",Image1); 
  18.  
  19.         Image1->roi=NULL; 
  20.         cvRectangle(Image1,cvPoint(176,186)
  21. ,cvPoint(176 + 14,186 + 22),CV_RGB(255,0,0),1,8,0); 
  22.         cvNamedWindow("Coast",1); 
  23.         cvShowImage("Coast",Image1); 
  24.  
  25.         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数据结构实例

  1. #include <cv.h> 
  2. #include <highgui.h> 
  3. #include <stdio.h> 
  4. #include <stdlib.h> 
  5.  
  6. int main() 
  7.     CvPoint2D32f Point1 =cvPoint2D32f(200,200); 
  8.     CvSize2D32f Size1 = cvSize2D32f(50,50); 
  9.     CvBox2D Box1; 
  10.  
  11.     Box1.center=Point1; 
  12.     Box1.size=Size1; 
  13.     Box1.angle=90; 
  14.  
  15.     printf("Box Point is :(%.1f,%.1f)\n",Box1.center.x,Box1.center.y); 
  16.     printf("Box Size is : (%.1f,%.1f)\n",Box1.size.width,Box1.size.height); 
  17.     printf("Box Angle is : %.1f\n",Box1.angle); 
  18.     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数据结构)

(fzzl)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201109/14996.html]
本文出处:fzzl.is-programmer.com 作者:fzzl
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容