opencv不同深度CvArr*(CvMat*,IplImage*)类型的显示

对于不同的图片深度,显示是有范围的


下面转一段别人总结的深度显示范围。
测试double型:0.0--1.0之间                          IPL_DEPTH_64F
 
测试float型:0.0--1.0之间                             IPL_DEPTH_32F
 
测试long型:0--65535之间                            IPL_DEPTH_32S       
 
测试short int型:-32768--32767之间                 IPL_DEPTH_16S      
 
测试unsigned short int型:0--65535之间             IPL_DEPTH_16U
 
测试char型:-128--127之间                           IPL_DEPTH_8S        
 
测试unsigned char型:0--255之间                    IPL_DEPTH_8U
 
这个时候如果需要保存图像,请记住要先转换到IPL_DEPTH_8U的深度。因为只有8位单通道或者3通道(通道顺序为'BGR')才可以使用cvSaveImage保存。

 
用cvScale 或cvConvertScale(const CvArr* src, CvArr* dst, double scale=1, double shift=0) 来转换,cvConvertScale会将src转为dst,深度由dst决定,如果 scale=1,shift=0 就不会对src进行比例缩放.

同时图像的分辨率过大,Opencv的highgui套件的窗口显示只会显示溢满显示器的部分图片,剩下的将看不到,所以必须要使用cvResize改变图片大小来缩放显示。

显示不同深度和缩放的显示函数代码如下:

void ShowConvertImage(char name[200],IplImage* Image)
{
 cvNamedWindow(name,1);
 char savename[350];
 sprintf(savename,"%s.jpg",name);
 
 cvSaveImage(savename,Image);
    if(Image->width<1280)
 {
  
  if(Image->depth!=IPL_DEPTH_8U)
  {  
    IplImage* NormalizeImage=NULL;
    NormalizeImage=cvCreateImage(cvGetSize(Image),IPL_DEPTH_8U,1);
    cvConvertScale(Image,NormalizeImage,1,0);//将图转为0-256,用于图片显示,
    cvShowImage(name,NormalizeImage);
             cvReleaseImage(&NormalizeImage);
  }
  else
  {
             cvShowImage(name,Image);
  }
 }
 else
 {
  IplImage* ImageResize=cvCreateImage(cvSize(1280,Image->height/(Image->width/1280)),Image->depth ,Image->nChannels);
  cvResize(Image,ImageResize,1);
     if(ImageResize->depth!=IPL_DEPTH_8U)
  {  
    IplImage* NormalizeImage=NULL;
    NormalizeImage=cvCreateImage(cvGetSize(ImageResize),IPL_DEPTH_8U,1);
    cvConvertScale(Image,NormalizeImage,1,0);//将图转为0-256,用于图片显示,
    cvShowImage(name,NormalizeImage);
             cvReleaseImage(&NormalizeImage);
  }
  else
  {
             cvShowImage(name,ImageResize);
  }
 
  cvReleaseImage(&ImageResize);
 }
 
}

 

 

 

你可能感兴趣的:(opencv不同深度CvArr*(CvMat*,IplImage*)类型的显示)