C 中使用OPenCV Emgu 心得

2021-06-10 08:26:09 字數 2105 閱讀 2345

1.先是在程式中影象的匯入,我是根據影象路徑實現,其中path是string型別,是影象路徑。

intptr img=cvinvoke.cvloadimage(path, emgu.cv.cvenum.load_image_type.cv_load_image_anycolor);

2.影象灰度化處理,先建立一幅尺寸大小為為原圖的8位影象grayimg1:

rectangle cr = cvinvoke.cvgetimageroi(img1);

int width = cr.width;

int height = cr.height;

intptr grayimg1 = cvinvoke.cvcreateimage(cr.size, emgu.cv.cvenum.ipl_depth.ipl_depth_8u, 1);

現在就能使用cvcvtcolor函式實現灰度化:

cvinvoke.cvcvtcolor(img1, grayimg1, emgu.cv.cvenum.color_conversion.cv_bgr2gray);

3.直方圖的建立,並獲取資料

int hist_size = new int[1] ;//建乙個陣列來存放直方圖資料

intptr histimg=cvinvoke.cvcreatehist(1, hist_size, emgu.cv.cvenum.hist_type.cv_hist_array, null, 1);//建立了乙個空的直方圖

cvinvoke.cvcalchist(inptr1, histimg,false,system.intptr.zero);//計算inptr1指向影象的資料,並傳入histimg中,其中intptr inptr1 = new intptr[1] 。

現在要獲取histimg中的具體資料:

for (int i = 0; i < 256; i++)

這樣在陣列temphist中儲存了直方圖資料。

4.對第一步中由cvloadimage匯入的影象進行畫素點的操作。由於img 是intptr型別無法直接進行操作,所以首先要進行格式的轉化,把intptr型轉換成miplimage:

emgu.cv.structure.miplimage mipimg =

(emgu.cv.structure.miplimage)system.runtime.interopservices.marshal.ptrtostructure(img, typeof(emgu.cv.structure.miplimage));

然後再c#中使用unsafe中指標操作:npixel = (int)((byte*)img.imagedata + img.widthstep * i)[j];

5.在二值話的影象,對不為零的區域經行檢測。

intptr dyncontour = new intptr();//存放檢測到的影象塊的首位址

intptr dynstorage = cvinvoke.cvcreatememstorage(0);開闢記憶體區域

n表示檢測到不為零區域的個數。

6.對第五步檢測到的區域繪製輪廓

for(;dyncontourtemp!=null&&dyncontourtemp.ptr.toint32()!=0;dyncontourtemp=dyncontourtemp.hnext)

其中的dyncontourtemp為

seqdyncontourtemp1= new seq(dyncontour, null);//方便對intptr型別進行操作

seqdyncontourtemp=dyncontourtemp1;

7.對第五步檢測出的區域的座標提取,通過cvfindcontours函式的呼叫在 dyncontour中存放的是不為零區域座標的值儲存在記憶體中的首位址指標。

seqdyncontourtemp1= new seq(dyncontour, null); //方便對intptr型別進行操作

int total=contourimg.total;//contourimg包含的元素的總數

int tempx = 0;  int tempy = 0;int[,] contourarray = new int[2,total];

//獲得輪廓的座標值

for (int i = 0; i < total;i++ )

C 中使用OPenCV Emgu 心得

首先介紹一下自己的情況,2010年的3月份開始接觸學習c 程式設計,之前c 和opencv都是零基礎,由於全都是自學進度比較慢,中間也走了不少彎路。進過三個月自己的學習與探索,對c 中使用opencv也算是有點心得,希望對初學者有所幫助,也希望大牛們進行指點。我使用的程式設計環境是vs2005,使用...

C 中使用OPenCV Emgu 心得

1.先是在程式中影象的匯入,我是根據影象路徑實現,其中path是string型別,是影象路徑。intptr img cvinvoke.cvloadimage path,emgu.cv.cvenum.load image type.cv load image anycolor 2 影象灰度化處理,先建...

C 中使用OPenCV Emgu 心得

首先介紹一下自己的情況,2010年的3月份開始接觸學習c 程式設計,之前c 和opencv都是零基礎,由於全都是自學進度比較慢,中間也走了不少 彎路。進過三個月自己的學習與探索,對c 中使用opencv也算是有點心得,希望對初學者有所幫助,也希望大牛們進行指點。我使用的程式設計環境是 vs2005,...