双三次補間を使って画像のサイズ変更を行いたい。しかし、私の出力イメージ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 interpolation) – Sam
ありがとうございます。私は違いを見るために出力画像のサイズを指定しなければならないことに気付きました。私は最初にそれを認識していませんでした。 –