IplImage的使用 從三通道圖中分離出三個單通道

  1.  opncvtest.cpp : 定義控制檯應用程序的入口點。  
  2. //  
  3. #include "stdafx.h"  
  4. #include<stdio.h>  
  5.   
  6. #include <opencv2/opencv.hpp>  
  7.    
  8. using namespace std;  
  9. using namespace cv;  
  10.    
  11. int _tmain(int argc, _TCHAR* argv[])  
  12. {  
  13.     const char* imagename = "itti.jpg";  
  14.    
  15.     //從文件中讀入圖像  
  16.     IplImage * img = cvLoadImage("C:\\Users\\laicb\\Desktop\\test.jpg");  
  17.    
  18.     //如果讀入圖像失敗  
  19.     IplImage * b = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);  
  20.     IplImage * g = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);  
  21.     IplImage * r = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);  
  22.   
  23.     printf("width = %d,height = %d chanels= %d depth = %d",img->width,img->height,img->nChannels,img->depth);  
  24.   
  25.       
  26.     char  * data = img->imageData;  
  27.     int step = img->widthStep;  
  28.     int chanel = img->nChannels;  
  29.   
  30.     char * bdata = b->imageData;  
  31.     char * gdata = g->imageData;  
  32.     char * rdata = r->imageData;  
  33.   
  34.     for(int i=0;i<img->height;i++)  
  35.     {  
  36.         for(int j=0;j<img->width;j++)//這裏注意三通道的step是單通道的三倍,這裏注意除以3,否則數組越界,IPL_DEPTH_8U  
  37.         {  
  38.             bdata[i*step/3 + j] = data[i*step + j*chanel];  
  39.                         gdata[i*step/3 + j] = data[i*step + j*chanel + 1];  
  40.             rdata[i*step/3 + j] = data[i*step + j*chanel + 2];  
  41.         }  
  42.     }  
  43.       
  44.     //顯示圖像  
  45.     cvNamedWindow("blue");  
  46.     cvNamedWindow("green");  
  47.     cvNamedWindow("red");  
  48.   
  49.     cvShowImage("blue",b);  
  50.     cvShowImage("green",g);  
  51.     cvShowImage("red",r);  
  52.   
  53.     cvNamedWindow("Window Test");  
  54.     cvShowImage("Window Test",img);  
  55.   
  56.     cvWaitKey(0);  
  57.   
  58.     cvReleaseImage(&img);  
  59.   
  60.     cvDestroyWindow("Window Test");  
  61.    
  62.     //此函數等待按鍵,按鍵盤任意鍵就返回  
  63.     waitKey();  
  64.    
  65.     return 0;  
  66. }  
發佈了28 篇原創文章 · 獲贊 7 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章