我想使用双三次插值执行图像大小调整。但是,我的输出图像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;
}
最好阅读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
@vasile非常感谢。我意识到,我必须指定我的输出图像的大小以查看差异。起初我没有意识到这一点。 – 2012-03-09 19:21:04