2012-02-04 108 views
0

我正在尝试调整图像大小,然后显示它以检查它是否已被调整大小。调整大小和显示图像

#include"cv.h" 
#include"highgui.h" 
#include<iostream> 
using namespace cv; 

int main() 
{ 
    IplImage* ipl = cvLoadImage("test1.jpg"); 
    cvShowImage("original:",ipl); 
    CvSize size = cvSize(128,128); 
    IplImage* tmpsize=cvCreateImage(size,8,0); 
    cvResize(ipl,tmpsize,CV_INTER_LINEAR); 
    cvShowImage("new",tmpsize); 

    waitKey(0); 
    return 0; 
} 

但它会产生一个错误 OpenCV的错误:断言未知功能 文件c ==失败dst.type < >>:\从\ winInstallerMegaPack的\ src \ OpenCV的\模块\ imgproc的\ src \ imgwarp。 cpp line. 请指出我做错了什么,并提出一些解决方法。另一方面,其他代码工作正常。

IplImage *source = cvLoadImage("test1.jpg"); 
// Here we retrieve a percentage value to a integer 
int percent =50; 
// declare a destination IplImage object with correct size, depth and channels 
     IplImage *destination = cvCreateImage 
(cvSize((int)((source->width*percent)/100) , (int)((source->height*percent)/100)), 
            source->depth, source->nChannels); 

//use cvResize to resize source to a destination image 
cvResize(source, destination); 

// save image with a name supplied with a second argument 
     cvShowImage("new:",destination); 
     waitKey(0); 
return 0; 

请说明。

+0

问题是,您试图将操作的结果存储在与原始图像不兼容的图像中:两张图像必须具有相同类型(n通道和深度)。 – karlphillip 2012-02-05 03:25:53

+0

@ karlphillip-我了解这两个图像有一些区别,但我无法弄清楚区别。谢谢。 – 2012-02-05 07:35:41

回答

1

您是使用第一个还是第二个代码示例?

如果你使用第一个,我想你的“tmpsize”应该和你的源文件具有相同的通道数。

+0

我已经尝试使用这两个代码。第一个产生了一个错误,但第二个完全罚款。你是什么意思相同数量的渠道? – 2012-02-05 07:34:05

+0

由于cvResize要求你符合这个标准,所以karlphillip解释“ipl”和“tmpsize”必须是相同的类型。因此,确保它们都具有相同的深度和频道数量。有关更多信息,请查看OpenCV文档:http://opencv.willowgarage.com/documentation/basic_structures.html#iplimage – dom 2012-02-05 09:41:12

0

在第一个示例中,您为通道数量编写0 0 所以更改 IplImage * tmpsize = cvCreateImage(size,8,0); line IplImage * tmpsize = cvCreateImage(size,ipl-> depth,ipl-> nChannels);