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);
 }
 
}

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值