現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV+MP::2値化

問題


以下の画像をグレイスケールで読み込み、
OpenMPを使って、行単位で並列処理を行い2値化せよ。

画像

答え


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

using namespace std;

/************[プロトタイプ宣言]****************/
void OMP_PARALLEL_BINARY(IplImage *imgA);


/***********[メイン関数]*****************/
int main( int argc, char **argv)
{

IplImage *image = cvLoadImage( "test.jpg", CV_LOAD_IMAGE_GRAYSCALE);
if(image ==NULL)
{
printf("File not found\n");
exit(0);
}

OMP_PARALLEL_BINARY(image);


cvNamedWindow("parallel",CV_WINDOW_AUTOSIZE);
cvShowImage("parallel",image);

cvReleaseImage( & image);

cvWaitKey(0); // 0秒待つ => ずっと入力待ち

cvDestroyAllWindows();

return 0;
}



/************[ここから、各種関数]**************/
void OMP_PARALLEL_BINARY(IplImage *imgA)
{
int i;
int j;

#pragma omp parallel for schedule(static) private(i)
for( j = 0 ; j < imgA->height;++j)
{
for(i = 0; i<imgA->widthStep ; ++i)
{

if(unsigned (imgA->imageData[j*imgA->widthStep+i]) > unsigned char(127))
{
imgA->imageData[j*imgA->widthStep+i] = char(255);
}
else
{
imgA->imageData[j*imgA->widthStep+i] = char(0);
}
}
}

}

メモ


並列処理の部分について

「j」が共有変数 → ここが並列
「i」がローカル変数

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます