Peut-on implémenter une progressBar dans une application OpenCV ? Peut-être au dessus d'une image ?
Réponses
Trop de publicités?Si vous voulez utiliser seulement OpenCV, ce que j'utilise est de multiplier un nombre entre 0 et 1 à une image ouverte dans une fenêtre. i.e : si vous utilisez le nouveau 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);
}
L'effet est très agréable à mon avis, mieux qu'une simple barre de progression. Vous avez seulement besoin de la bibliothèque opencv, si l'image est petite est très légère pour le CPU.
Mais si vous voulez voir une "barre", le moyen le plus simple est d'utiliser la fonction ligne :
C++: void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0)
pt1 est un point dans un coin de votre image, pt2 est le point dans lequel leur axe x ou Y change par exemple dans l'autre code :
axis=(int)(image.size().width*(i/N));
Si vous avez vraiment besoin d'une interface graphique conviviale, pourquoi ne pas utiliser Qt ? Il peut être facilement intégré avec opencv et il y a beaucoup d'outils pour personnaliser et créer des interfaces graphiques. Jetez un coup d'oeil au lien officiel fourni par Qt pour intégrer opencv. http://qt-project.org/wiki/OpenCV_with_Qt
Vous pouvez utiliser WINAPI ProgressBar, mais ce n'est pas une bonne idée.
Créez d'abord une fenêtre WINAPI, par exemple :
HWND hwnd = CreateWindowEx(0, "STATIC", "#img", WS_CHILD | WS_VISIBLE,
0, 40, 800, 500, hwnd, NULL, hInstance, NULL);
Et une barre de progression sur cette fenêtre :
HWND hProgressBar = CreateWindowEx( 0, PROGRESS_CLASS, NULL, WS_CHILD | WS_VISIBLE,
10, 10, 200, 15, hwnd,( HMENU ) 200, hInstance, NULL );
Si vous avez une application et une fenêtre WINAPI prête à fonctionner, vous pouvez créer une fenêtre openCV :
namedWindow("openCV", 1);
SetParent((HWND)cvGetWindowHandle("openCV"), hwnd);
Et cacher la fenêtre openCV :
HWND win_handle = FindWindow(0, "openCV");
if (!win_handle)
{
printf("Failed FindWindow\n");
}
else
{
ShowWindow(win_handle, SW_HIDE);
}
Maintenant, vous avez une barre de progression fonctionnelle au-dessus d'une image.