没有第三方库的c ++图像处理教程

时间:2013-07-15 06:03:53

标签: c++ image image-processing

我想学习C++中的图像处理,但我不想使用任何第三方库进行图像处理。使用库来显示图像是可以的,但所有操作都是手动完成的。

请指点一些好的教程。我是这个领域的初学者,所以我还需要知道如何显示图像。

2 个答案:

答案 0 :(得分:7)

似乎你缺乏数字图像处理的基本知识,我建议你这本书。 数字图像处理(第3版)Rafael C.Gonzalez / Richard E.Woods http://www.amazon.com/dp/013168728X

对于使用OpenCV(我熟悉)的基本操作,这是一个例子:

/*
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;  
}  

答案 1 :(得分:0)

尝试CImg(它完全是独立的) - http://cimg.sourceforge.net/