2013-07-15 13 views
10

Voglio imparare l'elaborazione delle immagini in C++, ma non voglio usare qualsiasi libreria 3rd party per la manipolazione delle immagini. L'uso della libreria per la visualizzazione delle immagini è ok, ma tutte le manipolazioni devono essere eseguite manualmente.C++ tutorial elaborazione di immagini withuot libreria di 3a parte

per favore mi punto ad alcuni buoni tutorial. Sono un principiante in questo campo, quindi ho anche bisogno di sapere come visualizzare un'immagine.

+0

si vuole manipolare le immagini senza l'utilizzo di una libreria premade? Hai una strada molto, molto lunga davanti a te. Non ci sarà un tutorial per questo. Dovrai leggere le specifiche JPG, capire la teoria dietro le manipolazioni delle immagini (a meno che tu non stia facendo cose semplici come il ritaglio), e quindi applicare tali manipolazioni al formato specifico di JPG. E allora avrete bisogno di ripetere per PNG, GIF, ecc – Corbin

+0

Se il tuo obiettivo è l'immagine * * elaborazione si dovrebbe almeno anche utilizzare una libreria di caricare le immagini da vari formati contenitore come PNG, JPEG, TIFF, ... . Questi di per sé non hanno nulla a che fare con l'elaborazione. Accanto a questa domanda è ovviamente troppo ampia, usa google. – KillianDS

+0

Se il tuo obiettivo principale è imparare l'elaborazione digitale delle immagini, ti suggerisco di iniziare usando Matlab invece di C++. – Korchkidu

risposta

7

Sembra ti manca una conoscenza di base di Digital Image Processing, Consiglierei a questo libro. Digital Image Processing (3rd Edition) Rafael C.Gonzalez/Richard E.Woods http://www.amazon.com/dp/013168728X

Per il funzionamento di base utilizzando OpenCV (che mi è familiare), ecco un esempio:

/* 
function:image reverse 
*/ 
#include "stdafx.h" 
#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
#include <cv.h> 
#include <highgui.h> 
int main(int argc, char *argv[]) 
{ 
    IplImage* img = 0; 
    int height,width,step,channels; 
    uchar *data; 
    int i,j,k; 
    if(argc<2) 
    { 
     printf("Usage: main <image-file-name>/n/7"); 
     exit(0); 
    } 
    // Load image 
    img=cvLoadImage(argv[1],-1); 
    if(!img) 
    { 
     printf("Could not load image file: %s\n",argv[1]); 
     exit(0); 
    } 
    // acquire image info 
    height = img->height;  
    width  = img->width;  
    step  = img->widthStep;  
    channels = img->nChannels; 
    data  = (uchar *)img->imageData; 
    printf("Processing a %dx%d image with %d channels/n",height,width,channels); 
    // create display window 
    cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 
    cvMoveWindow("mainWin", 100, 100); 
    // reverse image 
    for(i=0;i<height;i++) 
     for(j=0;j<width;j++) 
      for(k=0;k<channels;k++) 
       data[i*step+j*channels+k]=255-data[i*step+j*channels+k]; 
    // display reversed image 
    cvShowImage("mainWin", img); 
    cvWaitKey(0); 
    cvReleaseImage(&img); 
    printf("height=%d width=%d step=%d channels=%d",height,width,step,channels); 
    return 0; 
} 
+0

Non voglio entrare nei dettagli di JPEG o altri contenitori. Quello che voglio fare è: caricare l'immagine (l'uso della libreria di terze parti sarà migliore per questo IMO), quindi applicare le modifiche manuali ai dati dei pixel (i valori RGB) per eseguire varie manipolazioni. –

+0

@HarshilSharma Basta usare la parte di base della libreria grafica di terze parti, come OpenCV, CXImage, per quanto ne so. – lulyon

+0

@HarshilSharma Per "modifiche manuali ai dati pixel", verificare la risposta aggiornata con un esempio OpenCV. – lulyon

Problemi correlati