2013-07-15 14 views
10

C++で画像処理を学びたいが、画像操作にサードパーティのライブラリを使用したくない。イメージを表示するためのライブラリの使用は問題ありませんが、すべての操作は手動で行う必要があります。C++画像処理チュートリアルwithuotサードパーティライブラリ

良いチュートリアルを教えてください。私はこの分野の初心者ですから、イメージを表示する方法も知っておく必要があります。

+0

あなたはpremadeライブラリを使用せずに画像を操作したいですか?あなたは非常に、非常に長い道を先にしています。そのためのチュートリアルはありません。 JPG仕様を読んで、操作を想像している理論を​​理解してから(単純なものをトリミングしない限り)、JPGの特定のフォーマットにその操作を適用する必要があります。そして、あなたはPNG、GIFなどのために繰り返す必要があります – Corbin

+0

あなたのターゲットが画像*処理*であるならば、あなたは少なくともpng、jpeg、tiff、などの様々なコンテナフォーマットから画像を読み込むためにライブラリを使うべきです... 。これらは、それ自体が処理とは関係ありません。次にこの質問は明らかに広すぎる、googleを使用することです。 – KillianDS

+0

主な目的がデジタル画像処理を学ぶことであるならば、まずC++の代わりにMatlabを使うことをお勧めします。 – Korchkidu

答えて

7

あなたはデジタル画像処理の基本知識が不足しているようですが、この本をお勧めします。 (私は精通しています)のOpenCVを使用して、基本的な操作のために ディジタル画像処理(第3版)ラファエル・C.Gonzalez /リチャードE.Woods http://www.amazon.com/dp/013168728X

は、ここでの例です:

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

私はJPEGやその他のコンテナの詳細を知りたくありません。私がしたいのは、画像をロードすること(サードパーティ製のライブラリを使用する方がこのIMOのほうが良いでしょう)、ピクセルデータ(RGB値)を手動で変更してさまざまな操作を行うことです。 –

+0

@ HarshilSharma OpenCV、CXImageのような第三者の図書館の基本部分を私が知る限り使用してください。 – lulyon

+0

@ HarshilSharma「ピクセルデータを手動で変更する」については、OpenCVの例で更新された回答を確認してください。 – lulyon