Interpolazione BICUBICA usando OpenCV
-
09-12-2019 - |
Domanda
Voglio eseguire un'immagine ridimensiona usando l'interpolazione bicubica.Tuttavia, la mia immagine di uscita, new_img sembra esattamente come la mia immagine caricata originale, img.Inoltre, quando ho trovato la larghezza e l'altezza di New_img, ha le stesse dimensioni della mia immagine originale.Pensavo che l'immagine di destinazione avrebbe dovuto essere ridimensionata? Questo è il mio codice.Qualcuno vedesse se ho fatto qualcosa in modo inaccuratamente, per favore?Grazie in anticipo.
#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;
}
}
.
Codice alterato:
#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;
}
. Soluzione
IplImage* new_img = img;
fa una copia superficiale così new_img e il punto IMG per gli stessi dati
Altri suggerimenti
È necessario ridimensionare .. Hai 2 modi (solo mostrando scala per altezza):
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);
.
Allora OpenCV figura automaticamente il rapporto tra il test in testicolo utilizzando il "SZ" (esempio: "Y" Factor è 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);
.
Allora OpenCV utilizza il parametro "2.0F" come rapporto (per "y"), ma qui è necessario assicurarsi che il testout abbia abbastanza dimensioni per tale rapporto