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

2021-04-29 21:21:28 字數 4010 閱讀 5876

影象資料結構

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基礎資料結構

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,i...

opencv基礎資料結構

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

openCV之基礎資料結構

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