OpenCV显示图像时,不同位深度的影响
来源:互联网 发布:大型网络3d手游2016年 编辑:程序博客网 时间:2024/05/19 02:00
最近在搞一个视频监控的项目,要用OpenCV库进行处理,但这两天一直有一个问题很纠结我,就是,处理过后的图像老是显示不正确,做了各种测试,具体问题可以用下面的例子阐明;
#include <stdio.h>#include <cv.h>#include <cxcore.h>#include <highgui.h>int main(){IplImage *test, *pFrame;CvCapture *pCapture;char pathName[256];printf("请输入视频文件的路径名:");scanf("%s",pathName);pCapture = cvCreateFileCapture(pathName);if (pCapture == NULL){printf("输入的视频文件有问题\n");return 0;}if (pFrame = cvQueryFrame(pCapture)){test = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_32F, 3);cvConvertScale(pFrame, test, 1);cvNamedWindow("original", 1);cvNamedWindow("converted", 1);cvShowImage("original", pFrame);cvShowImage("converted", test);//cvDestroyAllWindows();}for (;;){if (cvWaitKey(2) >= 0)break;}cvReleaseImage(&test);cvReleaseCapture(&pCapture); return 0;}
程序的显示结果如下:
当时我想cvConvertScale(pFrame, test, 1)只是复制了图像数据,并没有进行比例变换呀。所以很郁闷。
然后我进行了如下尝试:
cvSaveImage("test.bmp", test);test = cvLoadImage("test.bmp", CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH);cvShowImage("converted", test);结果显示正确了:
为什么会保存之后在读取显示会正确呢,那么在保存的时候,cvSaveImage函数一定做了什么事情。经过调试发现,保存前test数据的位深度是IPL_DEPTH_32F即32位的,而保存后读取的test数据的位深度是8位的。也就是说cvSaveImage函数在存储时把3通道32位的图像变成了3通道8位的图像。
然而查阅手册时发现,只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存,如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换;或者使用通用的cvSave保存图像为XML或者YAML格式。最新的OpenCV 2.3.2 documentation也是这么说的。
然后我就纠结了,好吧,这个问题先放下。
上面所说的问题主要是由于图像位深度的原因,在显示的时候利用cvConvertScale()进行转换一下就可以了。
以后再补充吧。打球回来太累了。
21:23 Otc 23, 2012 @lab
- OpenCV显示图像时,不同位深度的影响
- OpenCV对不同图像深度的处理
- OpenCV对不同图像深度的处理
- OpenCV不同图像深度类型的理解
- OpenCV笔记——图像不同位深度间的转换
- opencv不同深度CvArr*(CvMat*,IplImage*)类型的显示
- opencv不同深度CvArr*(CvMat*,IplImage*)类型的显示
- 不同深度图像的处理
- opencv Mat 显示不同数据类型图像
- opencv:图像的显示
- 图像旋转90度(CImage类实现)(不同的位深度)
- opencv 图像的深度和通道介绍
- opencv中图像的深度和通道
- opencv 图像的深度和通道
- opencv 图像的深度和通道介绍
- opencv 图像的深度和通道介绍
- Opencv 16位深度图片显示并保存
- OpenCV--鼠标响应Kinect彩色图像显示深度信息
- 转 git 保存用户名密码
- An Eventful Trip
- SQL Server 异常 COM 类公司中CLSID 为 {10021F00-E260-11CF-AE68-00AA004A34D5} 的组件时失败,原因是出现以下错误: 80070005
- VC与linux通过socket通讯
- IBM pSeries AIX System Administration -- 存储管理、LVM 和文件系统一
- OpenCV显示图像时,不同位深度的影响
- AHB 总线 与 APB 总线
- windows2008 远程桌面多用户登陆的配置方法
- jQuery Ajax 全解析
- 领土局本副局长蒙贿获刑5年
- 强颜欢笑的伤感日志推荐:真的只是有时候
- java 冒泡排序
- 英特尔无线MyWIFI技术让你电脑变路由——静态ip稳定方法
- 一道3G门户的面试题 (Java)