Ciao ragazzi, nel frattempo mi sono studiato una possibile soluzione: ho scoperto che con le opencv si può misurare l'intensità di un pixel e così mi sono detto "quasi quasi metto l'immagine in scala di grigi almeno il pallino del laser viene molto più luminoso" e in effetti è così (: così ho buttato giù questo codice:
codice:
#include <stdio.h>
#include "opencv2/highgui/highgui.hpp"
#include <cv.h>
int main(){
//preparo la grandezza dell'immagine cavia
CvSize size = cvSize(640, 480);
//dichiaro l'immagine campione
IplImage *image;
//creo l'immagine cavia
IplImage *img = cvCreateImage(size, IPL_DEPTH_8U, 1);
//catturo una foto dall'immagine campione
CvCapture *capture = cvCreateCameraCapture(0);
image = cvQueryFrame(capture);
//converto l'immagine campione in scala di grigi nell'immagine cavia
cvCvtColor(image, img, CV_RGB2GRAY);
//la visualizzo
cvNamedWindow("IMAGE", CV_WINDOW_AUTOSIZE);
cvShowImage("IMAGE", img);
//ne prelevo altezza e larghezza
int h, w;
h = img->height;
w = img->width;
//controllo
printf("h: %ipx, w: %ipx, ch: %i", h, w, img->nChannels);
if(img->depth == IPL_DEPTH_8U)
printf(" depth: 8u");
//attendo pressione di un tasto
cvWaitKey(0);
//valore da confrontare
double val = 0;
//oggetti per le funzioni Get/Set 2D
CvScalar its, set;
//oggetti per i cicli
int i, j, imgArr[2];
//ciclo di controllo dell'intensità dei pixel
for(i = 0; i < h; i++){
for(j = 0; j < w; j++){
its = cvGet2D(img, i, j); //-->questa è la parte di codice che non funziona
if(its.val[0] > val){
val = its.val[0];
imgArr[0] = i; //h
imgArr[1] = j; //w
}
}
}
//setto lo scalare a 255 (bianco)
set.val[0] = 255;
//ciclo che crea la croce bianca
for(i = 0; i < w; i++){
cvSet2D(img, imgArr[0], i, set);
}
for(i = 0; i < h; i++){
cvSet2D(img, i, imgArr[1], set);
}
cvShowImage("IMAGE", img);
//printf("h%i . w%i", imgArr[0], imgArr[1]);
//attendo la pressione di un tasto
cvWaitKey(0);
//rilascio le risorse
cvDestroyWindow("IMAGE");
cvReleaseCapture(&capture);
cvReleaseImage(&image);
cvReleaseImage(&img);
return 0;
}
Mi sono assicurato che tutto fosse scritto a dovere, di non aver omesso niente..e mi pare che fili tutto liscio, ma non è così a quanto pare.
La famosa funzione che si dovrebbe occupare di individuare l'intensità di un pixel (la cvGet2D() ) fa le bizze..per la cvSet2D() non ci sono problemi ma questa mi manda in palla tutto
prima mi aveva dato un errore che ora non mi da più (non mi ricordo nemmeno che errore era sinceramente), comunque appena arriva al pezzo di codice relativo alla cvGet2D() si blocca tutto, e mi manda il classico "il programma non funziona: Windows sta cercando una soluzione bla bla bla -> chiudi programma"
Dov'è che sbaglio?