示例#1
0
文件: EIOS.cpp 项目: ashaman88/SMART
rgb* EIOS_GetImageBuffer(Target t) {
    return (rgb*)getImageArray();
}
示例#2
0
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;
    
}