Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2014, 00:38   #1
_Лето_
Пользователь
 
Регистрация: 04.11.2013
Сообщений: 23
По умолчанию Обработка изображения на С++ используя OpenCV

Здравствуйте. Не получается разобраться в программе. Пожалуйста, объясните что здесь откуда и как правильно ее запустить чтобы она работала?

Задача сама звучит так: Дано изображение, которое имеет до 255 оттенков серого. От 170 оттенка - делать черным, до 170 - белым.

Как вообще работает OpenCV?

Код:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
 
using namespace cv;
using namespace std;
 
int computeOutput(int, int, int, int, int);
 
int main()
{
    Mat image = imread("pic.jpg");
    Mat new_image = image.clone();
 
    int r1, s1, r2, s2;
    cout<<"Enter r1: "<<endl; cin>>r1;
    cout<<"Enter s1: "<<endl; cin>>s1;
    cout<<"Enter r2: "<<endl; cin>>r2;
    cout<<"Enter s2: "<<endl; cin>>s2;
 
    for(int y = 0; y < image.rows; y++){
        for(int x = 0; x < image.cols; x++){
            for(int c = 0; c < 3; c++){
                int output = computeOutput(image.at<Vec3b>(y,x)[c], r1, s1, r2, s2);
                new_image.at<Vec3b>(y,x)[c] = saturate_cast<uchar>(output);
            }
        }
    }
 
    namedWindow("Original Image", 1);
    imshow("Original Image", image);
 
    namedWindow("New Image", 1);
    imshow("New Image", new_image);
 
    waitKey();
 
    return 0;
}
 
int computeOutput(int x, int r1, int s1, int r2, int s2)
{
    float result;
    if(0 <= x && x <= r1){
        result = s1/r1 * x;
    }else if(r1 < x && x <= r2){
        result = ((s2 - s1)/(r2 - r1)) * (x - r1) + s1;
    }else if(r2 < x && x <= 255){
        result = ((255 - s2)/(255 - r2)) * (x - r2) + s2;
    }
    return (int)result;
}
Если есть возможность, объясните каждую строчку.
_Лето_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка изображения Chester751 Мультимедиа в Delphi 1 12.04.2013 23:19
Скелитолизация изображения используя алгоритм Зонга-Суня Terikon Общие вопросы Delphi 0 19.01.2013 15:09
обработка и преобразование изображения midiss C++ Builder 0 04.06.2012 14:52
Обработка изображения Hollander Мультимедиа в Delphi 6 10.03.2008 14:21