EmguCV 一些基本操作

一、先是在程序中圖像的導入,我是根據圖像路徑實現,其中path是string類型,是圖像路徑。

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

二、圖像灰度化處理,先創建一幅尺寸大小為為原圖的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);

三、直方圖的創建,并獲取數據

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

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] { SubImg}。

現在要獲取Histimg中的具體數據:

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

??????????? {

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

??????????? }

這樣在數組temphist中保存了直方圖數據。

四、對第一步中由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];

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

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

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表示檢測到不為零區域的個數。

六、對第五步檢測到的區域繪制輪廓

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;

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

seq<Point> DyncontourTemp1= new Seq<Point>(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++ )

{

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

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

?}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387668.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387668.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387668.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java字符串分割

java中字符串的分割函數&#xff0c;split("你想要分割的字符", 你想要最多分割為多少段&#xff0c;正整數&#xff09; 注意事項&#xff1a; 1.分割特殊字符考慮轉義字符的使用。如&#xff1a; . \ | 2.第二個參數&#xff1a; 無&#xff1a; 不傳默認分割全部…

OpenCV人臉識別的原理 .

在之前講到的人臉測試后&#xff0c;提取出人臉來&#xff0c;并且保存下來&#xff0c;以供訓練或識別是用&#xff0c;提取人臉的代碼如下&#xff1a; [html] view plaincopy print?void GetImageRect(IplImage* orgImage, CvRect rectInImage, IplImage* imgRect,double s…

說一下SEO和SEM到底有哪些區別?

開場白免了&#xff0c;我們直接說與主題相關的。 SEO和SEM到底有什么區別&#xff1f; SEO和SEM到底有什么區別 我們先理解字面意思&#xff1a; SEO&#xff08;Search Engine Optimization&#xff09;&#xff1a;漢譯為搜索引擎優化。 SEM&#xff08;Search Engine Marke…

django模型的繼承

很多時候&#xff0c;我們都不是從‘一窮二白’開始編寫模型的&#xff0c;有時候可以從第三方庫中繼承&#xff0c;有時候可以從以前的代碼中繼承&#xff0c;甚至現寫一個模型用于被其它模型繼承。這樣做的好處&#xff0c;我就不贅述了&#xff0c;每個學習Django的人都非常…

SpringBoot部署項目到Docker倉庫

SpringBoot部署項目到Docker倉庫1.開啟遠程控制端口Centos7開啟方式&#xff1a; vim /lib/systemd/system/docker.service找到ExecStart行 ExecStart/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock 重啟docker 啟動 systemctl start docker守護進程…

人臉識別經典方法

這篇文章是擼主要介紹人臉識別經典方法的第一篇&#xff0c;后續會有其他方法更新。特征臉方法基本是將人臉識別推向真正可用的第一種方法&#xff0c;了解一下還是很有必要的。特征臉用到的理論基礎PCA在另一篇博客里&#xff1a;特征臉(Eigenface)理論基礎-PCA(主成分分析法)…

Jquery常用正則驗證

常用校驗的正則表達式var rulesConfig { /** * str.replace(/^\s|\s$/g, ) 解析&#xff1a; str&#xff1a;要替換的字符串 \s : 表示 space &#xff0c;空格 &#xff1a; 一個或多個 ^&#xff1a; 開始&#xff0c;^\s&#xff0c;以空格開始 $&#xff1a; 結束&#x…

svm參數說明

svm參數說明---------------------- 如果你要輸出類的概率&#xff0c;一定要有-b參數 svm-train training_set_file model_file svm-predict test_file model_fileoutput_file 自動腳本&#xff1a;Python easy.py train_data test_data 自動選擇最優參數&#xff0c;自動進行…

poj-3667(線段樹區間合并)

題目鏈接&#xff1a;傳送門 參考文章&#xff1a;傳送門 思路&#xff1a;線段樹區間合并問題&#xff0c;每次查詢到滿足線段樹的區間最左值&#xff0c;然后更新線段樹。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; co…

面試題編程題11-python 生成隨機數

隨機整數&#xff1a; random.randint(a,b), [a,b] random.randrange(a,b,step) [a,b) 隨機實數 random.random()返回0 到1 之間的浮點數轉載于:https://www.cnblogs.com/feihujiushiwo/p/10922454.html

車牌識別之顏色選取

車牌定位是車牌識別中第一步&#xff0c;也是最重要的一步。 由于中國車牌種類多樣&#xff0c;顏色不一&#xff0c; 再加上車牌經常有污損&#xff0c;以及車牌周圍干擾因素太多&#xff0c;都成為了車牌定位的難點。 這里首先使用最簡單算法來描述車牌定位&#xff0c;以及他…

Python - 排序( 插入, 冒泡, 快速, 二分 )

插入排序 算法分析 兩次循環, 大循環對隊列中的每一個元素拿出來作為小循環的裁定對象 小循環對堆當前循環對象在有序隊列中尋找插入的位置 性能參數 空間復雜度  O(1) 時間復雜度  O(n^2) 詳細代碼解讀 import randomdef func(l):# 外層循環: 對應遍歷所有的無序數據for i…

[EmguCV|C#]使用CvInvoke自己繪製色彩直方圖-直方圖(Hitsogram)系列(4)

2014-02-0610325 0C# 檢舉文章 過年結束了&#xff0c;雖然還是學生所以其實還有兩個禮拜的假期&#xff0c;不過為了不讓自己發慌&#xff0c;趁著假期多利用充實自己&#xff0c;所以提早回到開工狀態&#xff0c;而這次總算要把一直說的自己動手繪製猜色直方圖文章寫出。 …

G.點我

鏈接&#xff1a;https://ac.nowcoder.com/acm/contest/903/G 題意&#xff1a; X腿與隊友到河北省來參加2019河北省大學生程序設計競賽&#xff0c;然而這場比賽的題目難度實在是太高了。比賽開始一個小時后&#xff0c;X腿仍然沒有做出一個題。這時候&#xff0c;X腿驚訝的發…

輪廓的查找、表達、繪制、特性及匹配(How to Use Contour? Find, Component, Construct, Features Match)

前言 輪廓是構成任何一個形狀的邊界或外形線。前面講了如何根據色彩及色彩的分布&#xff08;直方圖對比和模板匹配&#xff09;來進行匹配&#xff0c;現在我們來看看如何利用物體的輪廓。包括以下內容&#xff1a;輪廓的查找、表達方式、組織方式、繪制、特性、匹配。 查…

Android:IntentService的學習

在Android的四大組件中&#xff0c;Service排行老二&#xff0c;在Android中的主要作用是后臺服務&#xff0c;進行與界面無關的操作。由于Service運行在主線程&#xff0c;所以進行異步操作需要在子線進行。為此Android為我們提供了IntentService。 IntentService是一個抽象類…

智能商業大會構造信息化交流平臺

在快速發展的當今社會&#xff0c;所有事物都在日新月異地變化著&#xff0c;相較于過去的傳統商業的變化速度&#xff0c;現今基于數據的互聯網商業變化速度高出了一個量級&#xff0c;同時市場對于企業的應對速度也有了更高的要求&#xff0c;然而面對大體量的數據&#xff0…

itcast-ssh-crm實踐

分析 BaseDao 文件上傳 轉載于:https://www.cnblogs.com/hellowq/p/10209761.html

分類器大牛們

David Lowe&#xff1a;Sift算法的發明者&#xff0c;天才。 Rob Hess&#xff1a;sift的源碼OpenSift的作者&#xff0c;個人主頁上有openSift的下載鏈接&#xff0c;Opencv中sift的實現&#xff0c;也是參考這個。 Koen van de Sande&#xff1a;作者給出了sift,densesift,co…

go 成長路上的坑(1)

一、先來看一段代碼 package mainimport "fmt"type X struct{}func (x *X) test(){println("h1",x) } func main(){a : X{} a.test()(&X{}).test()(X{}).test() } 猜猜他的結果 二、揭曉答案 package mainimport "fmt"type X struct{}func (…