10

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

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

4

2 回答 2

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;  
}  
于 2013-07-15T06:09:45.287 回答
0

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

于 2013-07-15T17:31:08.660 回答