2012-03-08 6 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 interpolation) – Sam

+0

ありがとうございます。私は違いを見るために出力画像のサイズを指定しなければならないことに気付きました。私は最初にそれを認識していませんでした。 –

答えて

0

IplImage* new_img = img;同じデータにシャローコピーそうnew_imgとIMGポイントを行い

+0

私はコードを変更してそのエラーを解決しようとしました。しかし、私はまだ両方の画像が同一であると見ています。変更されたコードはコメントに投稿するには時間がかかりすぎますので、変更されたコードの元の質問に含めました。あなたが私に何を変えてくださいか教えていただけたら大変感謝します。 –

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" を使用TESTOUTにTESTIN間の比率を数値:そう(例えば "Y" 因子がsz.height/testIn.Heightある)

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は比率( "Y"の場合)として "2.0f"パラメータを使用しますが、ここではtestOutがそのような比率に十分なサイズを持っていることを確認する必要があります

関連する問題