OpenCV progressBar - PullRequest
       4

OpenCV progressBar

2 голосов
/ 28 апреля 2011

Можно ли реализовать progressBar в приложении OpenCV?Может быть, поверх изображения?

Ответы [ 4 ]

11 голосов
/ 28 апреля 2011

Мне неизвестен какой-либо встроенный класс progressBar, но вы, вероятно, можете эмулировать один или написать свой, нарисовав два прямоугольника друг над другом. Один представляет полный диапазон, а другой представляет прогресс.

So something like that ...

0 голосов
/ 23 декабря 2016

Вы можете использовать WINAPI ProgressBar, но это не очень хорошая идея.

Сначала создайте окно WINAPI, например:

HWND hwnd = CreateWindowEx(0, "STATIC", "#img", WS_CHILD | WS_VISIBLE,
            0, 40, 800, 500, hwnd, NULL, hInstance, NULL);

И индикатор выполнения в этом окне:

HWND hProgressBar = CreateWindowEx( 0, PROGRESS_CLASS, NULL, WS_CHILD | WS_VISIBLE,
10, 10, 200, 15, hwnd,( HMENU ) 200, hInstance, NULL );

Если у вас есть готовое рабочее приложение и окно WINAPI, вы можете сделать окно openCV:

namedWindow("openCV", 1); 
SetParent((HWND)cvGetWindowHandle("openCV"), hwnd);

и скрыть окно openCV:

HWND win_handle = FindWindow(0, "openCV");
        if (!win_handle)
        {
            printf("Failed FindWindow\n");
        }
        else
        {
            ShowWindow(win_handle, SW_HIDE);
        }

Теперь вы работаете с ProgressBarверх изображения.

0 голосов
/ 03 июня 2015

Если вы хотите использовать только OpenCV, я использую умножение числа от 0 до 1 на изображение, открытое в окне.То есть: если вы используете новый C ++ Opencv:

Mat A=...some image that show for example the text "DONE" or your dog or cat :P
double alpha=0;
int N=100;//steps
for(int i=1;1<N;i++)
{
// some process...
alpha=i/N;
A=A*alpha;// and alpha is a scalar
// if you are using the old C Opencv use cvConvertScale
//then show A
imshow("Progress Image...",A)
waitKey(666);
}

Эффект очень хороший, на мой взгляд, лучше, чем простой индикатор прогресса.вам нужна только библиотека opencv, если изображение маленького размера очень легкое для процессора.

Но если вы хотите увидеть «полосу», самый простой способ - использовать функцию строки:

C++: void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0)

pt1 - это точка в одном углу вашего изображения, pt2 - это точка, в которой изменяется их ось x или Y, например, в другом коде:

axis=(int)(image.size().width*(i/N));
0 голосов
/ 23 марта 2015

Если вам действительно нужен удобный графический интерфейс, почему бы вам не использовать Qt. Его можно легко интегрировать с opencv, и есть много инструментов для настройки и создания графического интерфейса. Взгляните на официальную ссылку, предоставленную Qt для интеграции opencv. http://qt -project.org / вики / OpenCV_with_Qt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...