C#中怎么調用opencv函數(shù)

今天就跟大家聊聊有關C#中怎么調用open cv函數(shù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)建站服務項目包括江孜網站建設、江孜網站制作、江孜網頁制作以及江孜網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,江孜網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到江孜省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

1.先是在程序中圖像的導入,我是根據(jù)圖像路徑實現(xiàn),其中path是string類型,是圖像路徑。

IntPtr img=CvInvoke.cvLoadImage(path, Emgu.CV.CvEnum.LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_ANYCOLOR);

2.圖像灰度化處理,先創(chuàng)建一幅尺寸大小為為原圖的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);

現(xiàn)在就能使用cvCvtColor函數(shù)實現(xiàn)灰度化:

CvInvoke.cvCvtColor(img1, GrayImg1, Emgu.CV.CvEnum.COLOR_CONVERSION.CV_BGR2GRAY);

3.直方圖的創(chuàng)建,并獲取數(shù)據(jù)

int[] hist_size = new int[1] { 256 };//建一個數(shù)組來存放直方圖數(shù)據(jù)

IntPtr HistImg=CvInvoke.cvCreateHist(1, hist_size, Emgu.CV.CvEnum.HIST_TYPE.CV_HIST_ARRAY, null, 1);//創(chuàng)建了一個空的直方圖

CvInvoke.cvCalcHist(inPtr1, HistImg,false,System.IntPtr.Zero);//計算inPtr1指向圖像的數(shù)據(jù),并傳入Histimg中,其中IntPtr[] inPtr1 = new IntPtr[1] { SubImg}。

現(xiàn)在要獲取Histimg中的具體數(shù)據(jù):

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

            {

                temphist[i] = CvInvoke.cvQueryHistValue_1D(histImg, i);

            }

這樣在數(shù)組temphist中保存了直方圖數(shù)據(jù)。

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.在二值話的圖像,對不為零的區(qū)域經行檢測。

IntPtr Dyncontour = new IntPtr();//存放檢測到的圖像塊的首地址

IntPtr Dynstorage = CvInvoke.cvCreateMemStorage(0);開辟內存區(qū)域

int n= CvInvoke.cvFindContours(tempimg, Dynstorage, ref Dyncontour, StructSize.MCvContour, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_CCOMP,Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE, new Point(0, 0));

n表示檢測到不為零區(qū)域的個數(shù)。

6.對第五步檢測到的區(qū)域繪制輪廓

for(;DyncontourTemp!=null&&DyncontourTemp.Ptr.ToInt32()!=0;DyncontourTemp=DyncontourTemp.HNext)

{

CvInvoke.cvDrawContours(tempContImg, DyncontourTemp,new MCvScalar(255, 255, 255),new MCvScalar(255, 255, 255), 0, 1, Emgu.CV.CvEnum.LINE_TYPE.EIGHT_CONNECTED, new Point(0, 0));

 }

其中的DyncontourTemp為

Seq<Point> DyncontourTemp1= new Seq<Point>(Dyncontour, null);//方便對IntPtr類型進行操作

Seq<Point> DyncontourTemp=DyncontourTemp1;

7.對第五步檢測出的區(qū)域的坐標提取,通過cvFindContours函數(shù)的調用在 Dyncontour中存放的是不為零區(qū)域坐標的值存儲在內存中的首地址指針。

seq<Point> DyncontourTemp1= new Seq<Point>(Dyncontour, null); //方便對IntPtr類型進行操作

int total=contourImg.Total;//contourImg包含的元素的總數(shù)

 int TempX = 0;  int TempY = 0;int[,] contourArray = new int[2,total];

 //獲得輪廓的坐標值

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

{

  contourArray[0,i]=contourImg[i].X;

  contourArray[1,i]=contourImg[i].Y;

 }

看完上述內容,你們對C#中怎么調用open cv函數(shù)有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

本文名稱:C#中怎么調用opencv函數(shù)
本文URL:http://muchs.cn/article46/pieceg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、商城網站、電子商務網站內鏈、外貿網站建設、建站公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網站建設