OpenCV バイナリデータをいじる

バイナリデータをいじってみた。


OpenCVで、画像のデータはIplImageかcv::Matで扱える。IplImageはCの構造体、cv::MatはC++のクラスらしい!やっぱり前回のサンプルとかも全然意味分かんないので当面はCだけでやっていく。

画像のデータはIplImage構造体の中のchar* imageDataに入っているみたいなのでとりあえずそれを1文字ずつ適当な数字に変えてみる。

#include 
#include 
#include "opencv/cv.h"
#include "opencv/highgui.h"

int main(int argc, char* argv[]){
    

    IplImage* img = cvLoadImage("/Users/Daichi/Desktop/lena.jpg", CV_LOAD_IMAGE_COLOR);
    
    int i;
    for(i=0;i<100000;i++){
        printf("%c\n",img->imageData[i]);
        img->imageData[i] = 2;
    }
    
    cvNamedWindow ("glitch", CV_WINDOW_AUTOSIZE);
    cvShowImage ("glitch",img);
    cvWaitKey (0);
    cvDestroyWindow("glitch");
    cvReleaseImage(&img);

    return 0;
}


コレを実行すると.....


f:id:highdef:20140220095030p:plain
変えた部分だけ真っ黒になった。

どうやら

img->imageData[i]=数字;

の数字は0〜255の範囲で有効っぽくて、0に近い程黒くなって、255に近い程白になっていった.
char型は1文字(1ビット)だからか。





これは

img->imageData[i*3]=255;

の設定。それっぽくなってきたぞ。。
f:id:highdef:20140220095605p:plain







imageDataを1文字づつ表示させてみたら
f:id:highdef:20140220065920p:plain
こんな感じ。
\3桁の数字 とアルファベット1文字、とかが混在してるけど、よくわからんなー


一連の動作を関数にまとめたいけど構造体を関数に渡すのが上手くできない!(ポインタ、あやふや)