最近在搞一个视频监控的项目,要用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;
}
程序的显示结果如下:

在处理视频监控项目中,使用OpenCV遇到图像显示不正确的问题。经过测试发现,原图位深度为32位,而显示时需要8位图像。cvSaveImage在保存时自动将32位图像转换为8位,导致显示正常。解决方法是在显示前用cvConvertScale转换位深度。
最低0.47元/天 解锁文章
1007

被折叠的 条评论
为什么被折叠?



