Newsgroup: it.comp.lang.c++
Titolo: Open cv help!!

Devo fare una tesina di visione artificiale utilizzando una webcam.
A quanto ho capito devo utilizzare il pacchetto di librerie openCV, ma mi 
manca cmq la libreria openGL (ho il visual c++ 6.0)... dove la posso 
scaricare?
Ele

 ma mi manca cmq la libreria openGL (ho il visual c++ 6.0)
ma posso assicurarti che la libreria OpenGL fa gia' parte di Microsoft 
Windows almeno a partire da Windows 98 e Windows NT 4.
Inoltre, Visual C++ 6 fornisce i file header necessari.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 Inoltre, Visual C++ 6 fornisce i file header necessari.
cosě pensavo, ma nn riesco a trovarla sul mio pc 'sta benedetta libreria... 
e quindi nn so come includerla! 

 e quindi nn so come includerla! 
Solitamente si usa #include <GL/gl.h>.
Cercando "opengl windows" con google si trovano un po' di FAQ e tutorial;
forse qualcuno di questi fa al caso tuo:
http://www.nullterminator.net/opengl32.html
http://www.cprogramming.com/tutorial.html#opengltutorial
http://www.opengl.org/resources/faq/technical/mswindows.htm

 ha scritto nel messaggio 
news:e2ldvl$nut$1...@nnrp-beta.newsland.it...


Il problema principale è che nonostante includa la benedetta libreria in 
questione con il comando #include, le funzioni che ne fanno parte nn mi 
vengono riconosciute e di conseguenza nn va un bel niente. 

 che scoprirai.
Quando riuscirò ad interfacciare la webcam con il visual c++ sentirai di 
sicuro il mio urlo di felicità :-D!!
Scusatemi, ma nn ho proprio nessuna esperienza di programmazione in c (so 
solo usare un po' matlab).
Cmq lo scopo del mio lavoro è creare un'applicazione real-time della webcam 
con le librerie openCV. 

 ha scritto nel messaggio 
news:e2ldvl$nut$1...@nnrp-beta.newsland.it...

-- 
----------------------------------------
La mia Cartella di Posta in Arrivo č protetta da SPAMfighter
268 messaggi contenenti spam sono stati bloccati con successo.
Scarica gratuitamente SPAMfighter!

Ele wrote:

Non vengono riconosciute dal compilatore o dal linker?
Prova a inviare il messaggio d'errore, ed eventualmente la riga di 
comando che usi per compilare e quella che usi per linkare.


Carlo Milanesi ha scritto:

Allora, installato Opencv_b5a, ho provato a fare un programmino stupido
di prova... ma nn mi riconosce nessuna funzione della libreria quando
vado a fare il build del mio programma...
L'errore che mi da è:
Error LNK 2001: unresolved external symbol _cvcamStart
che cosa manca?
Grazie
Ele (dall'università)

 Ele (dall'università)
l'errore mi pare dipenda dal fatto che tu non hai impostato da progetto
il path ai file .lib e .dll.
Ho usato queste librerie durante la mia tesi, adesso non ricordo con
precisione quali parametri devi impostare ma sul sito dalla intel (
visto che il progetto e' gestito da loro ) dovresti trovare un HOW TO.
Poi per ulteriori problemi ti consiglio di inscriverti ai vari gruppi
di discussione su 
yahoo.com
!
ne trovi una anche in italiano.

Ho cercato l'HOW TO, ma riguarda solo Linux...
Ma ho trovato un manuale per l'installazione su visual c++, seguendo le
istruzioni:
Dovrei aver incluso i path da pannello di
controllo>sistema>avanzate>variabili d'ambiente
e poi tramite tool>options, dal visual c++, ho selezionato le cartelle
bin delle varie librerie opencv (cvaux,cvcam,highgui,cv).
Poi quando faccio la prova, viene quel msg di errore.
Che vuol dire impostare da progetto il path?
Ele

Ele ha scritto:

Guarda, anche io sto facendo una tesina con openCV, e ti garantisco che
le openGL non c'entrano nulla.
Sicuro di aver settato al compilatore i flag
-I$PATH_OPENCV -lhighgui -lopencv
Consiglio a te e ad Alessandro di guardare questi siti:
openCV tutorial
http://www.site.uottawa.ca/~laganier/tutorial/opencv+directshow/cvision.htm
openCV documentation (questo sito è molto più dettagliato del pdf
"ufficiale")
http://www.cs.bham.ac.uk/resources/courses/robotics/doc/opencvdocs/
In particolare, se usate C++, può essere (MOLTO) utile creare una
sorta di wrapper per riscrivere le funzioni implementate da opencv
stesso.
In questo modo l'allocazione e la deallocazione avviene in modo
trasparente e senza rischio d'errore.
Vi riporto il mio wrapper in C++ (magari vi è utile):
~~~~~~~~~~~~~~~~~~~~ ImageProcessor.h ~~~~~~~~~~~~~~~~~~~~~~~
#include "IOManager.h"
#include "cv.h"      // core library
#include "highgui.h" // GUI library
class ImageProcessor {
 public:
  ImageProcessor(const char* filename, int iscolor=0)
throw(MyIOException*);
  ImageProcessor(const char* filename, int roix1 , int roiy1, int
roix2, int roiy2, int iscolor=0) throw(MyIOException*);
  ~ImageProcessor();
  void prepareDisplay(const char* title, bool fitsize = true);
  void prepareDisplayScaled(const char* title, bool fitsize = true);
  static void display(int seconds = 0);
  void resize(const int to_width, const int to_height);
  const char* getFilename();
  int getX();
  int getY();
  char* getVector();
  int getVectorLength();
  int getXScaled();
  int getYScaled();
  char* getVectorScaled();
  int getVectorScaledLength();
 private:
  IplImage* _img;		// l'immagine di lavoro
  IplImage* _imgScaled; 	// l'immagine ridimensionata
  const char* _filename;	// nome file
};
~~~~~~~~~~~~~~~~~~~~ ImageProcessor.cpp ~~~~~~~~~~~~~~~~~~~~~~~
#include "ImageProcessor.h"
#include <iostream>
/* Crea l'immagine con path filename e con profondita' iscolor.
 * Se iscolor = 0 l'immagine avra' un canale, se iscolor > 0 3 canali
 * se iscolor < 0 avra' il numero di canali previsti dal file */
ImageProcessor::ImageProcessor(const char* filename, int iscolor)
throw(MyIOException*) {
  _filename = filename;
  _img = cvLoadImage( filename, iscolor );
  if (_img) {
    _imgScaled = cvCloneImage(_img);
  } else {
    throw(new MyIOException(filename));
  }
}
ImageProcessor::ImageProcessor(const char* filename, int roix1 , int
roiy1, int roix2, int roiy2, int iscolor) throw(MyIOException*)
{
  _filename = filename;
  _img = cvLoadImage( filename, iscolor );
  if (_img) {
    _imgScaled = cvCloneImage(_img);
    cvSetImageROI(_imgScaled, cvRect(roix1, roiy1, roix2, roiy2));
  } else {
    throw(new MyIOException(filename));
  }
}
/* Distrugge le strutture create per l'immagine */
ImageProcessor::~ImageProcessor() {
  cvReleaseImage( &_img );
  cvReleaseImage( &_imgScaled );
}
/* Prepara la visualizzazione dell'immagine, consentendo di scegliere
se l'immagine
 * deve essere ridimensionata in modo tale da adattarsi alla finestra.
 * La visualizzazione effettiva viene attivata dalla funzione display()
*/
void ImageProcessor::prepareDisplay(const char* title, bool fitsize) {
  /* Crea la finestra */
  cvNamedWindow( title, fitsize );
  /* Visualizza la finestra */
  cvShowImage( title, _img );
}
void ImageProcessor::prepareDisplayScaled(const char* title, bool
fitsize) {
  /* Crea la finestra */
  cvNamedWindow( title, fitsize );
  /* Visualizza la finestra */
  cvShowImage( title, _imgScaled );
}
/* Visualizza tutte le immagini finora preparate */
void ImageProcessor::display(int seconds) {
  cvWaitKey(seconds * 1000);
}
const char* ImageProcessor::getFilename() {
  return _filename;
}
int ImageProcessor::getX() {
  return _img->width;
}
int ImageProcessor::getY() {
  return _img->height;
}
/* Restituisce il vettore linearizzato rappresentante l'immagine */
char* ImageProcessor::getVector() {
  return _img->imageData;
}
int ImageProcessor::getVectorLength() {
  return getX() * getY();
}
int ImageProcessor::getXScaled() {
  return _imgScaled->width;
}
int ImageProcessor::getYScaled() {
  return _imgScaled->height;
}
/* Restituisce il vettore linearizzato rappresentante l'immagine */
char* ImageProcessor::getVectorScaled() {
  return _imgScaled->imageData;
}
int ImageProcessor::getVectorScaledLength() {
  return getXScaled() * getYScaled();
}
/* Ridimensiona l'immagine alle dimensioni specificate */
void ImageProcessor::resize(const int to_width, const int to_height) {
  CvSize to_size;
  to_size.width = to_width;
  to_size.height = to_height;
  /* Dealloca la vecchia immagine */
  cvReleaseImage( &_imgScaled );
  /* Crea un'immagine di dimensioni specificate */
  _imgScaled = cvCreateImage(to_size,IPL_DEPTH_8U, 1);
  /* Ridimensiona dall'immagine originale a quella creata
   * con le dimensioni specificate */
  cvResize(_img, _imgScaled);
}

Ciao,
Questo newsgroup si occupa del linguaggio C++ in quanto tale, e non di
aspetti specifici di particolari implementazioni, come ad esempio
C++/CLI. Per questo non e' il posto piu' adatto per porre domande
specifiche come la tua.
Potresti avere piu' fortuna su uno dei seguenti gruppi:
Per Win32 (95, 98, NT): it.comp.programmare.win32
Per Dos/Win 3.x: it.comp.os.dos
Per Linux:	it.comp.os.linux.development
Per C++Builder:	i gruppi borland.public.cppbuilder.*, disponibili sul
		server 
newsgroups.borland.com
 (prevalentemente in
		inglese, ma si puo' postare anche in italiano)
Grazie,
Nicola Musatti

Non esiste alcun gruppo
it.comp.lang.c++.opencv
che in modo specifico si occupi di openCV.
Quindi secondo me Ele ha fatto bene a postarlo qui: qualsiasi altro
gruppo poteva fare la tua stessa osservazione...

 ha scritto nel messaggio 
news:1146043947....@j33g2000cwa.googlegroups.com...

Grazie! 


Quindi secondo te, dal momento che non esiste it.comp.gli.affari.miei
gli affari miei posso postarli qui.
Casa si puo' o non si puo' postare in un newsgroup e' definito dal
manifesto del gruppo stesso, non dall'esistenza o meno di newsgroup
piu' adatti. Come gia' detto e ridetto it.comp.lang.c++ *non* e' il
cestino dei rifiuti.
Ciao,
Nicola

 ha scritto nel messaggio 
news:1146070241.8...@i39g2000cwa.googlegroups.com...

Nn mi pare di aver fatto una domanda tanto fuori dall'argomento, dato che 
sempre di linguaggio C++ si tratta... se poi il mio post ti da tanta noia 
(nn ho obbligato nessuno a rispondere, nč tantomeno sono stata sgarbata) sei 
liberissimo di nn leggerlo.
Confidavo semplicemente nella gentilezza di chi ha notevole esperienza in 
piů, in genere i nwsgroup funzionano cosě.
Ringrazio tutti quelli che mi hanno gentilmente aiutato, per il momento sono 
riuscita ad aggirare il problema includendo "a mano" le librerie sopradette 
nel mio progetto.
Ele

 liberissimo di nn leggerlo.
Dato che Nicola è il gestore del NG è suo dovere cercare di mantenere 
ordine e limitare gli OT.
Inoltre il tuo problema non riguarda il linguaggio C++ inteso come 
caratteristiche del linguaggio in se stesso e non il suo uso in uno 
specifico ambiente e/o con uno specifico compilatore (al massimo avrebbe 
senso chiedere se il comportamento di un dato compilatore è corretto o 
meno rispetto alla definizione dello standard).
E non riguarda neppure openCV.
In pratica il problema è che non riesci a linkare una libreria esterna 
(openCV) utilizzando il compilatore di microsoft. E questa è una 
questione che riguarda il compilatore di microsoft in primis e lo 
sviluppo in ambiente windows in subordine. Non ha nulla a che fare con 
il linguaggio.
Quindi il suggerimento di Nicola non solo è dovuto visto il suo ruolo, 
ma è anche corretto nei suggerimenti (al contrario di quello di Ricibald 
che non centra neppure la questione).

 ordine e limitare gli OT.
Una piccola precisazione: non sono il "gestore" del newsgroup. Sono
solo quello che a suo tempo raccolse il punto di vista dei partecipanti
e sottopose il manifesto del gruppo al GARR.
Per il resto ci tengo a che esista un newsgroup dove parlare del C++
standard in italiano e quindi cerco di darmi da fare perche' il
contenuto del newsgroup si mantenga entro i termini a suo tempo
concordati.
Ciao,
Nicola

 più, in genere i nwsgroup funzionano così.
No. I newsgroup sono suddivisi in argomenti e le persone beneducate si
attengono a tali argomenti. Ci sono poi newsgroup i cui partecipanti
sono piu' elastici di altri, ma questo non implica il diritto a inviare
messaggi fuori tema.
Ciao,
Nicola

bin delle varie librerie opencv (cvaux,cvcam,highgui,cv).
Scegli "Options..." dal menu "Tools", tab "Directories", in alto
a destra scegli "Include files" e aggiungi i path (completi):
..... \opencv\cv\include
..... \opencv\cxcore\include
..... \opencv\otherlibs\highgui
..... \opencv\cvaux\include
In alto a destra scegli "Library files" e aggiungi i path:
..... \opencv\lib
Premi Ok
Dal menu "Project" scegli "Settings...", tab "Link", nel campo
"Object/library modules" aggiungi (se e' una Release):
CV.lib cxcore.lib highgui.lib
(se e' un Debug):
CVd.lib cxcored.lib highguid.lib
Premi Ok
Linka tranquillo.

 concordati.
Esatto. Avevo scritto moderatore, ma "moderatore" in genere vienne 
inteso solo per i gruppi moderati. Non esiste un termine usenet per 
indicare un moderatore senza potere esecutivo. Gestore mi sembrava 
semplicemente un termine meno peggio di altri.
Diciamo che eri il portavoce (io direi anche leader, ma oggi dire leader 
spesso č sinonimo del contrario, vedi it.lavoro.informatica) di chi 
volle la creazione del gruppo (e che ne decise le regole), che sei 
sempre stato attivo non solo nel gruppo ma anche nel far rispettare il 
manifesto etc. Quindi in un certo senso sei stato (e sei ancora) 
l'espressione "magna" (nel senso latino, non in quello milanese) dello 
spirito del gruppo stesso.

 spirito del gruppo stesso.
Troppo buono :-)
Ciao,
Nicola Musatti
Pifferaio di Hamelin di it.comp.lang.c++

 Linka tranquillo.
La parte di includere le librerie l'avevo fatta... quando invece vado a
fare questo procedimento mi da errore se considero un Debug
fatal error LNK1104: cannot open file "cxcored.lib"
se invece tento con il release, mi ridaà il solito unresolved external
symbol...
:-(
Grazie
Elena

 Pifferaio di Hamelin di it.comp.lang.c++
ROTFL ;-P

symbol...
Aggiungi la libreria cvcam.lib assieme alle altre in Release, nei
Setting del progetto.
(queste info le ottengo solo leggendo la documentazione, che
alcune volte e' obsoleta. Scusa le imprecisioni.)