前言
在上一篇是使用DenseHistogram提供的方法快速完成計算的步驟,在此篇要來介紹如何使用CVInvoke包裝的openCV函式來完成計算,並放置DenseHistogram類別
使用CvInvoke方法
在這邊以Hsv色彩空間為例,計算出Hue色相值方圖
初始化需要用到的相關類別變數
由於CvInvoke中所有使用到的參數型態都以IntPtr為基礎,因此要先初始化會用到的IntPtr變數
轉換至Hsv空間
計算Hue色相值方圖
IntPtr srcImage; //來源影像 //1.從檔案路徑初始化;srcFileName為字串 srcImage = CvInvoke.cvLoadImage(srcFileName, Emgu.CV.CvEnum.LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_ANYCOLOR); //2.從Emgu所使用的Image型態轉換至IntPtr Image image; srcImage = image.Ptr; //Image 有提供取得IntPtr的屬性 DenseHistogram histDense; //最後計算完存放回DenseHistogram類別 //使用CvInvoke的cvCreateImage方法分別創建存放轉換至Hsv色彩空間的影像與分割取得Hue通道的影像 IntPtr hsv = CvInvoke.cvCreateImage(CvInvoke.cvGetSize(srcImage), Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 3); IntPtr h_plane = CvInvoke.cvCreateImage(CvInvoke.cvGetSize(srcImage), Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 1);
//輸入圖像並轉換至Hsv空間 CvInvoke.cvCvtColor(srcImage, hsv, Emgu.CV.CvEnum.COLOR_CONVERSION.CV_BGR2HSV); //hsv是目的地影像 CvInvoke.cvSplit(hsv, h_plane, IntPtr.Zero, IntPtr.Zero, System.IntPtr.Zero); //影像通道分離,依序是h,s,v(s與v未用到所以填為IntPtr.Zero)
int h_bins = 32; RangeF hRange = new RangeF(0f, 180); //H色調分量的變化範圍 histDense = new DenseHistogram(h_bins, hRange); //雖然填寫的參數型態是IntPtr,而DenseHistogram類別有繼承自UnmanagedObject,因此具備轉換成IntPtr可作為填入參數 CvInvoke.cvCalcHist(new IntPtr[] { h_plane }, histDense, true, System.IntPtr.Zero);
H-S值方圖範例
//1.初始化 DenseHistogram histDense; int[] hist_size = new int[2] { h_bins, s_bins }; IntPtr hsv = CvInvoke.cvCreateImage(CvInvoke.cvGetSize(srcImage), Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 3); IntPtr h_plane = CvInvoke.cvCreateImage(CvInvoke.cvGetSize(srcImage), Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 1); IntPtr s_plane = CvInvoke.cvCreateImage(CvInvoke.cvGetSize(srcImage), Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 1); //2.輸入圖像並轉換至Hsv空間 CvInvoke.cvCvtColor(srcImage, hsv, Emgu.CV.CvEnum.COLOR_CONVERSION.CV_BGR2HSV); CvInvoke.cvSplit(hsv, h_plane, s_plane, System.IntPtr.Zero, System.IntPtr.Zero); // 分离的单通道数组d //3.創建直方圖 RangeF hRange = new RangeF(0f, 180); //H色調的變化範圍 RangeF sRange = new RangeF(0f, 255); //S飽和度的變化範圍 histDense = new DenseHistogram(hist_size, new RangeF[] { hRange, sRange }); CvInvoke.cvCalcHist(new IntPtr[] { h_plane, s_plane }, histDense, false, System.IntPtr.Zero);
Playcasino in Iowa: Now Open! | Jtm Hub
回覆刪除A full 동두천 출장마사지 list 여수 출장마사지 of online 밀양 출장마사지 casinos is available today, 시흥 출장안마 including top-rated Casinos, and the latest promotions! Get details 제주도 출장안마 on the bonus codes & promotions.