N_O_K_I_A
Commander
- Registriert
- Jan. 2007
- Beiträge
- 2.121
Moin,
ich versuche gerade mit Hilfe von OpenMP ein Filter für Bilder zu parallelisieren.
Leider bis jetzt eher mit fragwürdigem Erfolg.
Also das Filter läuft, nur das Parallelisieren bringt zeitlich keinen Vorteil.
(Programmiert wird unter Ubuntu)
Compiler:
g++ `pkg-config --libs --cflags opencv` filter_omp.cpp -o filter_omp
Code:
ich versuche gerade mit Hilfe von OpenMP ein Filter für Bilder zu parallelisieren.
Leider bis jetzt eher mit fragwürdigem Erfolg.

Also das Filter läuft, nur das Parallelisieren bringt zeitlich keinen Vorteil.
(Programmiert wird unter Ubuntu)
Compiler:
g++ `pkg-config --libs --cflags opencv` filter_omp.cpp -o filter_omp
Code:
Code:
#include <omp.h>
#include "cv.h"
#include "highgui.h"
#include "cvaux.h"
#include "cxcore.h"
#include "stdio.h"
#include "stdlib.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
long int i, j, x, y ;
float sum ;
long int pixel ;
long int width, height ;
IplImage* img = cvLoadImage( argv[1] );
IplImage* grayimg = cvCreateImage(cvSize(img->width,img->height),img->depth,1) ;
IplImage* filterimg = cvCreateImage(cvSize(img->width,img->height),img->depth,1) ;
width = img->width ;
height = img->height ;
/*
cvNamedWindow(argv[1], CV_WINDOW_AUTOSIZE );
cvShowImage(argv[1], img );
cvWaitKey(0); */
//cvNamedWindow("GRAY", CV_WINDOW_AUTOSIZE );
cvCvtColor(img,grayimg,CV_RGBA2GRAY) ;
//cvShowImage("GRAY", grayimg );
//cvWaitKey(0);
#pragma omp parallel
{
#pragma omp for reduction(+: sum)
for(i=0;i<width;i++){
for(j=0;j<height;j++) {
sum = 0 ;
for(x=i-1;x<=i+1;x++) {
for(y=j-1;y<=j+1;y++) {
if((x<0) || (y<0)|| (x>=width) || (y>=height)) {
//Randwertproblem
pixel = (int)(((uchar *)(grayimg->imageData+i*grayimg->widthStep))[j]) ;
} else {
pixel = (int)(((uchar *)(grayimg->imageData+x*grayimg->widthStep))[y]) ;
}
sum += pixel ;
}
}
sum = sum / 9 ;
((uchar *)(filterimg->imageData+i*filterimg->widthStep))[j]=(uchar)sum;
}
}
}
cvNamedWindow("Filter", CV_WINDOW_AUTOSIZE );
cvShowImage("Filter", filterimg );
cout<<"blub";
cvWaitKey(3000);
}