Я попытался выполнить гауссовское размытие с использованием C++ (OpenCV). Это кодgaussian blur C++ (can not show full image)
int mask [3][3] = {1 ,2 ,1 ,
2 ,3 ,2 ,
1 ,2 ,1 };
int getPixel (unsigned char * arr , int col , int row) {
int sum = 0;
for (int j = -1; j <=1; j ++) {
for (int i = -1; i <=1; i ++) {
int color = arr [(row + j) * width + (col + i) ];
sum += color * mask [ i +1][ j +1];
}
}
return sum /15;
}
void h_blur (unsigned char * arr , unsigned char * result) {
int offset = 2 *width ;
for (int row =2; row < height -3; row ++) {
for (int col =2; col < width -3; col ++) {
result [ offset + col ] = getPixel (arr , col , row) ;
}
offset += width ;
}
}
int main(int argc, char** argv)
{
starttime = getTickCount();
image_input = cvLoadImage("test.jpg", CV_LOAD_IMAGE_UNCHANGED);
width = image_input->width;
height = image_input->height;
widthStep = image_input->widthStep;
channels = image_input->nChannels;
IplImage* image_output = cvCreateImage(cvGetSize(image_input),IPL_DEPTH_8U,channels);
unsigned char *h_out = (unsigned char*)image_output->imageData;
unsigned char *h_in = (unsigned char*)image_input->imageData;
//sobel_parallel(h_in, h_out, width, height, widthStep, channels);
h_blur (h_in , h_out) ;
endtime = getTickCount();
printf("Waktu Eksekusi = %f\n", (endtime-starttime)/getTickFrequency());
cvShowImage("CPU", image_output);
cvSaveImage("output.jpg",image_output);
cvReleaseImage(&image_output);
waitKey(0);
}
, но когда я запускаю программу, образ разделены на три части. Я все еще не нашел, что не так с моим кодом. T_T
здесь результата
пожалуйста, помогите мне решить эту проблему.
О, мой бог, вы правы, это о канале (3 байта данных), который я определил в программе. Очень важно :)) SOLVED !! – bagusbekam