rgb* EIOS_GetImageBuffer(Target t) { return (rgb*)getImageArray(); }
int main(int argc, const char * argv[]) { IplImage * image = 0; // Исходное изображение, представленное структурой из OpenCV const char * filename = argc == 2 ? argv[1] : "/users/madmoron/Desktop/img.jpg"; // получаем картинку image = cvLoadImage(filename,1); if (!image) return 1; // Если изображение не найдено, то возвращается код ошибки // получение массива с цветами всех пикселей int *** arrImage = getImageArray(image); // диаглог с пользователем: настройка фильтра int filter=1; char answer='n'; printf("Настраивать фильтр [y/n]? "); scanf("%c",&answer); if (answer=='y' || answer=='Y') { int maskRadius; printf("Введите радиус окрестности пикселя для сравнения интенсивности "); scanf("%d",&maskRadius); float threshold; printf("Введите порог относительной разности интенсивности "); scanf("%f",&threshold); float ramp; printf("Введите сумму отностительной разности интенсивности до полного черного "); scanf("%f",&ramp); printf("Выбор фильтра:\n1:с размытием по Гауссу\n2:с усреднением значений "); scanf("%d",&filter); if (filter==1) { float sigma; printf("Введите значение среднеквадратического отклонения функции Гаусса "); scanf("%f",&sigma); int blurRadius; printf("Введите радиус размытия "); scanf("%d",&blurRadius); Cartoon::cartoonFilterWithGaussianBlur(arrImage, image->width, image->height, maskRadius, threshold, ramp, sigma, blurRadius); } else if (filter==2) Cartoon::cartoonFilterWithAverageValues(arrImage, image->width, image->height, maskRadius, threshold, ramp); else return 2; // Если неверно задан фильтр, то возвращается код ошибки } else { printf("Выбор фильтра:\n1:с размытием по Гауссу\n2:с усреднением значений "); scanf("%d",&filter); // применение фильтра if (filter==1) Cartoon::cartoonFilterWithGaussianBlur(arrImage, image->width, image->height); else if (filter==2) Cartoon::cartoonFilterWithAverageValues(arrImage, image->width, image->height); else return 2; // Если неверно задан фильтр, то возвращается код ошибки } // сборка нового изображения IplImage * newImage = collectImageFromArray(image,arrImage); /* отображание окна с изображением // окно для отображения картинки cvNamedWindow("original",CV_WINDOW_AUTOSIZE); // показываем картинку cvShowImage("original",newImage); // ждём нажатия клавиши cvWaitKey(0); */ // сохранение изображения в формате: имя исходного файла+"2" cv::string tempName=(cv::string)filename; tempName.insert(tempName.length()-4, "_filtered"); char * newFileName=new char[tempName.length()]; for (int i=0; i<tempName.length(); i++) newFileName[i]=tempName[i]; cvSaveImage(newFileName, newImage, 0); // освобождение ресурсов cvReleaseImage(& image); cvReleaseImage(& newImage); // удаляем окно //cvDestroyWindow("original"); return 0; }