OpenCV基礎資料結構

2021-05-22 00:03:10 字數 3983 閱讀 2572

opencv基礎資料結構圖譜

影象資料結構

ipl 影象: iplimage

|-- int nchannels; // 色彩通道數(1,2,3,4)

|-- int depth; // 象素色深:

| // ipl_depth_8u, ipl_depth_8s,

| // ipl_depth_16u,ipl_depth_16s,

| // ipl_depth_32s,ipl_depth_32f,

| // ipl_depth_64f

|-- int width; // 影象寬度(象素點數)

|-- int height; // 影象高度(象素點數)

|-- char* imagedata; // 指標指向成一列排列的影象資料

| // 注意色彩順序為bgr

|-- int dataorder; // 0 - 彩色通道交叉訪問 bgrbgrbgr,

| // 1 - 彩色通道分隔訪問 bbbgggrrr

| // 函式cvcreateimage只能建立交叉訪問的影象

|-- int origin; // 0 - 起點為左上角,

| // 1 - 起點為右下角(windows點陣圖bitmap格式)

|-- int widthstep; // 每行影象資料所佔位元組大小

|-- int imagesize; // 影象資料所佔位元組大小 = 高度*每行影象資料位元組大小

|-- struct _iplroi *roi;// 影象roi. 若不為null則表示需要處理的影象

| // 區域.

|-- char *imagedataorigin; // 指標指向影象資料原點

| // (用來校準影象儲存單元的重新分配)

| |-- int align; // 影象行校準: 4或8位元組校準

| // opencv不採用它而使用widthstep

|-- char colormodel[4]; // 影象色彩模型 - 被opencv忽略

矩陣與向量

矩陣: cvmat // 2維陣列

|-- int type; // 元素型別(uchar,short,int,float,double)

|-- int step; // 一行所佔位元組長度

|-- int rows, cols; // 尺寸大小

|-- int height, width; // 備用尺寸參照

|-- union data;

|-- uchar* ptr; // 針對unsigned char矩陣的資料指標

|-- short* s; // 針對short矩陣的資料指標

|-- int* i; // 針對integer矩陣的資料指標

|-- float* fl; // 針對float矩陣的資料指標

|-- double* db; // 針對double矩陣的資料指標

cvma*** // n-維陣列

|-- int type; // 元素型別(uchar,short,int,float,double)

|-- int dims; // 陣列維數

|-- union data;

| |-- uchar* ptr; // 針對unsigned char矩陣的資料指標

| |-- short* s; // 針對short矩陣的資料指標

| |-- int* i; // 針對integer矩陣的資料指標

| |-- float* fl; // 針對float矩陣的資料指標

| |-- double* db; // 針對double矩陣的資料指標

| |-- struct dim; // 每個維的資訊

|-- size; // 該維內元素個數

|-- step; // 該維內元素之間偏移量

cvsparsemat // 稀疏n維陣列

通用陣列: cvarr* // 僅作為函式引數,說明函式接受多種型別的陣列,例如:

// iplimage*, cvmat* 或者 cvseq*.

// 只需通過分析陣列頭部的前4位元組便可確定陣列型別

標量: cvscalar

|-- double val[4]; //4d向量

初始化函式:

cvscalar s = cvscalar(double val0, double val1=0, double val2=0, double val3=0);

舉例:

cvscalar s = cvscalar(20.0);

s.val[0]=10.0;

注意:初始化函式與資料結構同名,只是首字母小寫. 它不是c++的建構函式.

其他資料結構

點: cvpoint p = cvpoint(int x, int y);

cvpoint2d32f p = cvpoint2d32f(float x, float y);

cvpoint3d32f p = cvpoint3d32f(float x, float y, float z);

例如:

p.x=5.0;

p.y=5.0;

長方形尺寸: cvsize r = cvsize(int width, int height);

cvsize2d32f r = cvsize2d32f(float width, float height);

帶偏移量的長方形尺寸: cvrect r = cvrect(int x, int y, int width, int height);

//將色彩空間轉化到hsi空間,獲得其中的h分量:

iplimage* target=cvloadimage("target.bmp",-1);    //裝載

iplimage* target_hsv=cvcreateimage( cvgetsize(target), ipl_depth_8u, 3 );

iplimage* target_hue=cvcreateimage( cvgetsize(target), ipl_depth_8u, 1);

cvcvtcolor(target,target_hsv,cv_bgr2hsv);         //轉化到hsv空間

cvsplit( target_hsv, target_hue, null, null, null );      //獲得h分量

opencv 彩色影象rgb或其他通道分割:

m_source_pic是乙個iplimage*多通道影象.

方法一:

iplimage * redchannel     = cvcreateimage( cvgetsize(m_source_pic), 8, 1);

iplimage * greenchannel    = cvcreateimage( cvgetsize(m_source_pic), 8, 1);

iplimage * bluechannel = cvcreateimage( cvgetsize(m_source_pic), 8, 1);

iplimage * alphachannel    = cvcreateimage( cvgetsize(m_source_pic), 8, 1);

//提取rgb

cvcvtpixtoplane(m_source_pic,bluechannel,greenchannel,redchannel,null);

方法二:

cvsetimagecoi(m_source_pic,1);

cvcopy(m_source_pic,bluechannel); //提取藍色

cvsetimagecoi(m_source_pic,2);

cvcopy(m_source_pic,greenchannel);    //提取綠色

cvsetimagecoi(m_source_pic,3);

cvcopy(m_source_pic,redchannel); //提取紅色

opencv基礎資料結構

point 類不用多言,裡面兩個成員變數x,y。point 就是point2i,也是point,point 就是point2f,point 就是point2d。point3 類不太常用,跟point 類差不太多,成員變數x,y,z。size 類成員變數width height。size 就是size...

openCV之基礎資料結構

被乙個同學拉去面試乙個團隊,抱著試試看的心態去,竟然以後打算往人工智慧或者遊戲開發上面靠,計算機圖形學是必須要學的了。於是面試他們的影象處理組,最後陰差陽錯的進了。竟然進了就好好對待吧。opencv擼起來。這兩天看了一些部落格,還有借了 opencv計算機視覺程式設計攻略 來看。打算繼續用部落格的方...

OpenCV基礎資料結構(寫得不錯)

影象資料結構 ipl 影象 iplimage int nchannels 色彩通道數 1,2,3,4 int depth 象素色深 ipl depth 8u,ipl depth 8s,ipl depth 16u,ipl depth 16s,ipl depth 32s,ipl depth 32f,ip...