OpenGL de プログラミング - IplImage編02::まとめ1
現在地 >> メニュー >> OpenCV >> IplImage編02 >> IplImage編02::直接アクセス >> IplImage編02::まとめ1
関連IplImage編02::まとめ2IplImage編02::まとめ3IplImage編02::まとめ4

問題

画像をグレイスケールで読み込んで、ピクセルの値を変更せよ。

答え

#include <iostream>
#include <cv.h>
#include <highgui.h>

int main( int argc, char **argv)
{
	IplImage *imgA = cvLoadImage("test2.jpg",0);//グレイスケールで読み込む
	if(imgA == NULL){
		std::cerr << "Can't Load Image\n";
		return -1;
	}

	//アクセス方法1
	for(int y = 150; y < 200 ; ++y){
		for(int x = 200; x < 250; ++x){
			reinterpret_cast<unsigned char *>(imgA->imageData + y*imgA->widthStep)[x]=255; //(x,y)の位置を255にする
		}
	}

	//アクセス方法2
	for(int y = 400; y < 480 ; ++y){
		for(int x = 400; x < 480; ++x){
			imgA->imageData[y*imgA->widthStep + x] = static_cast<unsigned char>(255);
		}
	}

	//マクロを使ったアクセス
	for(int y = 50; y < 100 ; ++y){
		for(int x = 100; x < 150; ++x){
			CV_IMAGE_ELEM(imgA,unsigned char,y,x*imgA->nChannels)= 255;
		}
	}


	cvNamedWindow("Hello OpenCV",CV_WINDOW_AUTOSIZE);	
	cvShowImage("Hello OpenCV",imgA);

	cvWaitKey(0); // 0秒待つ => ずっと入力待ち
	cvReleaseImage(& imgA);  //メモリ解放
	
	cvDestroyWindow("Hello openCV");  //ウィンドウの破棄


	return 0;
}