IplImage的使用 从三通道图中分离出三个单通道

来源:互联网 发布:php 伪静态 编辑:程序博客网 时间:2024/04/27 22:26
  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. }  
0 0
原创粉丝点击