資料結構操作與運算-CvRect,CvBox2D資料結構

 轉自http://hi.baidu.com/%C3%B5%D1%A9%D3%C4%CF%E3/blog/item/9fbd6b3f55e1e23471cf6cf8.html

這兩個資料結構都是OpenCV ,roi專用的資料結構,roi,全名的意思就是感興趣的區域(感興趣區) ,對於圖形來講,總是有一些物體或是重要的圖像是我們必須要做研究,追蹤或分析的,物件追蹤在影像處理也是很大的一們領域,舉凡是人臉追蹤,汽車追蹤,鳥類追蹤,或是圖形檢索都是可以利用的roi的資料結構做實作的,而研究或分析的部份,則是對感興趣的區域實作特殊的演算法,或是對他做紋理或特徵分析,再資訊比對上面會得到很大的幫助。而CvRect資料結構則是畫方框, CvBox2D則是橢圓形的製作,一般感興趣區域演算法都是用方框CvRect來做實作, CvBox2D則是在OpenCV用人臉橢圓追蹤比較用的到。

這張圖片則是簡單的實作擷取感興趣的區域,圖中人物的頭像被cvRect資料結構設定,傳給IplImage資料結構而被抓到了,這只是一個簡單的手動抓人物的實作.這邊ROI的製作方式有很多種,這邊只是其中一種的介紹,之後還會有ROI相關的函式應用,在這張圖片內,利用cvRect()擷取感興趣位置的座標,以及他的區塊大小,前兩個參數是座標,後兩個是寬跟高,再將cvRect資料結構用cvRectToROI()轉成IplROI格式,然後直接給IplImage資料結構內的ROI,而Rect2的實作也只是把IplROI結構轉換成CvRect的資料結構罷了,而如果把IplImage資料結構的ROI設定成NULL,那又會回到原圖影像大小了,在這邊cvRectToROI()的第二個參數是COI(Color Of Interesting)感興趣的通道顏色,而在OpenCV的cvShowImage()沒有被實作出來,而它還是在其他演算法函式上被用的到.

CvRect 
矩形框的偏移和大小 

typedef struct CvRect
{
int x; /* 方形的最左角的x-座標 */
int y; /* 方形的最上或者最下角的y-座標 */
int width; /* 寬 */
int height; /* 高 */
}
CvRect;
/* 構造函數*/
inline CvRect cvRect( int x, int y, int width, int height );

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

int main()
{
     IplImage *Image1;
     IplROI ROI;
     CvRect Rect1,Rect2;
     Image1=cvLoadImage("coast2.jpg",1);
     Rect1=cvRect(200,50,100,100);
     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;
     cvNamedWindow("Coast",1);
     cvShowImage("Coast",Image1);

     cvWaitKey(0);
}

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");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章