2012-03-08 120 views
0

我想使用双三次插值执行图像大小调整。但是,我的输出图像new_img与我原始加载的图像img完全一样。另外,当我找到new_img的宽度和高度时,它与我的原始图像具有相同的尺寸。我认为目标图像本来应该调整大小? 这是我的代码。有人会看到我是否做了不准确的事吗?先谢谢你。使用openCV进行双三次插值

#include "cv.h" 
#include "highgui.h" 
#include "iostream" 

using namespace std; 
int main(int argc, char* argv) { 
IplImage* img = NULL; 
const int maxScale = 1; 
img = cvLoadImage("C:\\walk mii.jpg"); 
if (!img){return -1;} 
for(int s = 1; s <= maxScale; s++) 
{ 
    IplImage* new_img = img; 
    if(s > 1) { 
     new_img = cvCreateImage(cvSize(img->width*s,img->height*s), img->depth, img->nChannels); 
     cvResize(img, new_img, CV_INTER_CUBIC);} 
    cvNamedWindow("original", CV_WINDOW_AUTOSIZE); 
    cvShowImage("original", img); 
    cvNamedWindow("result", CV_WINDOW_AUTOSIZE); 
    cvShowImage("result", new_img); 

    CvSize dim = cvGetSize(new_img); 
     cout <<" dimensions:: height:" << dim.height<<" width:"<< dim.width<< endl; 

    cvWaitKey(0); 
    cvReleaseImage(&img); 
    cvReleaseImage(&new_img); 
    cvDestroyWindow("result"); 
    return 0; 
    } 
} 

改变的代码:

#include "cv.h" 
#include "highgui.h" 
#include "iostream" 

using namespace std; 
int main(int argc, char* argv) { 
IplImage* img = NULL; 
IplImage* new_img = NULL; 
img = cvLoadImage("C:\\walk mii.jpg"); 
if (!img){ 
    return -1;} 
new_img = cvCreateImage(cvSize(img->width,img->height), img->depth, img->nChannels); 
cvResize(img, new_img, CV_INTER_CUBIC); 
cvNamedWindow("original", CV_WINDOW_AUTOSIZE); 
cvShowImage("original", img); 
cvNamedWindow("result", CV_WINDOW_AUTOSIZE); 
cvShowImage("result", new_img); 

CvSize dim = cvGetSize(new_img); 
cout <<" dimensions:: height:" << dim.height<<" width:"<< dim.width<< endl; 

cvWaitKey(0); 
cvReleaseImage(&img); 
cvReleaseImage(&new_img); 
cvDestroyWindow("result"); 
return 0; 
} 
+0

最好阅读cvResize的文档。我敢打赌,这正是你想知道的。 http://opencv.itseez.com/modules/imgproc/doc/geometric_transformations.html?highlight=cvresiz#void cvResize(const CvArr * src,CvArr * dst,int插值) – Sam 2012-03-09 18:59:55

+0

@vasile非常感谢。我意识到,我必须指定我的输出图像的大小以查看差异。起初我没有意识到这一点。 – 2012-03-09 19:21:04

回答

0

IplImage* new_img = img;做一个浅副本,以便new_img和IMG指向相同的数据

+0

我试图通过更改代码来修复该错误。但是,我仍然看到两个图像是相同的。修改过的代码太长,无法发布评论,所以我已将它包含在原始问题中,并且已更改了代码。如果您能告诉我要更改什么,我将不胜感激。 – 2012-03-08 07:46:50

1

您需要扩展.. 你有2种方式(只显示高度):

1)

Mat testIn(inputRows, inputCols, CV_32F); 
Mat testOut(inputRows*2, inputCols, CV_32F); 
Size sz = testOut.size(); 

resize(testIn, testOut, sz, 0.0f, 0.0f, INTER_CUBIC); 

这样的OpenCV自动人物使用 “SZ”(例如: “Y” 因子sz.height/testIn.Height)的TESTIN到TESTOUT之间的比率

2)

Mat testIn(inputRows, inputCols, CV_32F); 
Mat testOut(inputRows*2, inputCols, CV_32F); 
Size sz = testOut.size(); 

resize(testIn, testOut, sz, 2.0f, 0.0f, INTER_CUBIC); 

所以openCV使用“2.0f”参数作为比率(对于“Y”),但在这里您必须确保testOut具有足够的尺寸以适应此比例