Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-02-2009, 12:22   #1
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
[C++] Individuare pallino rosso

Ciao a tutti oggi ho da proporvi 1 progetto che non so se sia realizzabile... Quello che vorei fare io sarebbe creare un programma che riesca ad individuare un pallino rosso sempre della stessa dimensione, colore e forma all' interno di una pagina web o di una immagine a seconda di quale delle due è più semplice da realizzare e a restituirne la posizione.
Il problema è che non so proprio da dove partire, non è cqualcuno conosce qualche funzione che mi potrebbe essere utile?
grazie i anticipo.

Ultima modifica di borelg : 22-02-2009 alle 12:25.
borelg è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2009, 15:14   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
usando un'immagine puoi semplicemente fare una scansione per regione/per pixel.

Diciamo che il pallino rosso è iscritto in un quadrato di 10 pixel di lato. Il gioco è già fatto. Fai un bel ciclo sui pixel dell'immagine prendendo ogni volta una regione quadrata di 10 pixel di lato. Se la distribuzione dei pixel rossi all'interno del quadrato estratto dall'immagini è la stessa del quadrato in cui è iscritto il cerchio da rilevare allora hai trovato quello che cercavi.

Questo nel presupposto elementare che il cerchio da el'immagine corrisponda esattamente a quello da da trovare.

Requisito che potrebbe essere poco probabile, soprattutto se la ricerca avvegna sullo screenshot di una pagina web. In questo caso non coincideranno nè le dimensioni nè i colori.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 10:45   #3
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
mi dareste qualche dritta giusto per iniziare?
borelg è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 14:09   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Pallino rosso in un'immagine bitmap.

Iniziamo a ridurre il problema ad un insieme di problemi più piccoli.

Definiamo Pallino come un oggetto che è in grado di dire se una matrice
quadrata di lato N pixel rappresenti o no un cerchio rosso iscritto in una
matrice di uguali dimensioni.

Codice:
class Pallino
	+èUnCerchio(p : MatriceQuadrataDiPixel) : boolean
Dove una MatriceQuadrataDiPixel è:

Codice:
class MatriceQuadrataDiPixel
	+size() : int
	+getPixel(riga : int, colonna : int) : Pixel
E un Pixel è, supponiamo, una tripletta rosso-verde-blu:

Codice:
class Pixel
	+rosso() : int
	+verde() : int
	+blu() : int
Ci serve anche qualcosa che data una bitmap sia in grado di trasformarla in un set di
matrici di pixel di lato N.

Codice:
class GeneratoreDiMatrici
	+GeneratoreDiMatrici(b : ImmagineBitmap, n : pixelPerLato)
	+estraiMatrici() : ListaDiMatriciQuadrateDiPixel
Dove ListaDiMatriciQuadrateDiPixel è... una lista:

Codice:
class ListaDiMatriciQuadrateDiPixel
	+size() : int
	+get(indice : int) : MatriceQuadrataDiPixel
Ora basta applicare un pallino al prodotto del generatore di matrici per avere
la risposta cercata.

Codice:
class Applicatore
	+esisteUnCerchioRosso(p : Pallino, g : GeneratoreDiMatrici) : boolean

Applicatore esegue la sua funzione chiedendo al pallino se almeno una delle
matrici generate da GeneratoreDiMatrici sia un cerchio:

Codice:
class Applicatore
	+esisteUnCerchioRosso(p : Pallino, g : GeneratoreDiMatrici) : boolean
	{
		per ogni MatriceQuadrataDiPixel M nella ListaDiMatriciQuadrateDiPixel di g
			se p èUnCerchio(M) allora return true
		return false
	}
Mi segui? Ti sconfiffera l'idea?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 14:27   #5
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
6 devastante... xò sinceramente non ti ho seguito molto dato che non le abbiamo ancora studiate le classi... Comunque mi avrebbero suggerito un altro metodo che forse dico forse è + facile... Hai presente che quando prendi un immagine clicchi "apri con" e poi usi il blocco note per aprirla ti viene fuori il file header (si dice così vero?) non si potrebbe estrapolare la posizione del pallino all' interno della pagina da quel file? così sarebbe + semplice, dato che si lavora con dei caratteri e non con delle immagini. Cosa ne dici?
borelg è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 14:39   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Potrebbe non essere così semplice.

Dipende da cosa intendiamo per "pallino" e "posizione".

Ad esempio è relativamente facile se il pallino è un'imagine esterna incorporata in un nodo del documento html avente posizione assoluta.

Cerchi nel file sorgente finchè non trovi il nome del file immagine del pallino (tipo "pallino.gif") poi prendi la posizione del nodo immagine (che sarà "absolute").

Altrimenti è una tragedia. Il sorgente html contiene testo che viene interpretato per riprodurre un contenuto grafico e l'interpretazione di html non è esattamente un lavoretto di una mezza giornata .
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 14:42   #7
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
no allora ti spiego il pallino ogni volta che clicco un tasto cambia posizione ma dal sorgente html non si riesce ad individuare la sua posizione, quindi quello che volevo fare io era uno stamp e poi analizzare l' immagine. Per fare questo volevo aprire l' immagine ottenuta con il tasto stamp con il blocco note e attraverso il file header capire dov'è il pallino rosso... capito?
borelg è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 14:47   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Stamp genera un'immagine bitmap: cioè una valanga di numeri e basta.

Diverso sarebbe se l'immagine fosse di tipo vettoriale in formato svg. Allora avresti un "testo da leggere".

Se provi a fare uno stamp, aprire paint, copiare l'immagine, salvarla su un file e poi aprirla con blocco note vedrai cosa intendo per valanga di numeri.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 14:51   #9
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
si è vero... come si fa allora ad ottenere un immagine in formato svg?
grazie ancora per il tuo aiuto
borelg è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 15:22   #10
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
se vuoi ti aggiungo in msn così facciamo prima a capirci...
comunque uno di questi software potrebbe essere di aiuto?
http://www.masternewmedia.org/it/200...vettoriale.htm
borelg è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 15:40   #11
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
L'idea non è irrealizzabile ma non so quanto sia affidabile. Il fatto è che la trasformazione di un'immagine bitmap in forma vettoriale è un'interpretazione più che una conversione: non è detto che il cerchio salti fuori, anche se è molto probabile.

Puoi comunque provare a vedere quale sia il risultato della trasformazione vettoriale di uno screenshot di una pagina html con un programma tipo Inkscape: fai uno stamp, lo incolli in Inkscape e poi lo converti in SVG.Apri il file SVG con un editor di testo e vedi se compaia qualche elemento che suggerisce la presenza del cerchio che vuoi trovare.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 19:04   #12
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
nessun risultato con inkheart quindi credo che sia necessario tornare all' idea originaria: quella del confronto di pixel... Xò io non so proprio da dove iniziare non è che mi potresti dare una spinta?
grazie in anticipo
borelg è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 19:36   #13
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
OT:

Quote:
Originariamente inviato da borelg Guarda i messaggi
se vuoi ti aggiungo in msn così facciamo prima a capirci...

tipico esempio di comunicazione tra un bimbominkia con la K e un esperto con i cosiddetti
da notare il nonscialáns con cui l'esperto, che probabilmente non ha mai usato MSN in vita sua ne' tantomeno vuole un accollo che gli chieda consigli informatici in tempo reale 24/7, glissa la frase quotata

scusatemi ma proprio non resistevo
borelg, PGI-Bis non é una fighetta trovata su qualche Live Space pieno di fotografie di ragazze-triglia*

* cioé ragazze che tirano sempre bacetti all'obiettivo quando fanno le foto; possibilmente con il volto a tre quarti.
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 19:58   #14
fero86
Senior Member
 
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
Quote:
Originariamente inviato da borelg Guarda i messaggi
nessun risultato con inkheart
fero86 è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 23:21   #15
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da borelg Guarda i messaggi
Ciao a tutti oggi ho da proporvi 1 progetto che non so se sia realizzabile... Quello che vorei fare io sarebbe creare un programma che riesca ad individuare un pallino rosso sempre della stessa dimensione, colore e forma all' interno di una pagina web o di una immagine a seconda di quale delle due è più semplice da realizzare e a restituirne la posizione.
Il problema è che non so proprio da dove partire, non è cqualcuno conosce qualche funzione che mi potrebbe essere utile?
grazie i anticipo.
Lo vedo un lavoro adatto per le reti neurali, ma se non hai ancora studiato le classi (cosa hai studiato di C++?) la vedo dura, mica perchè non si possa fare anche in C, è solo perchè il tuo livello di conoscenze sembra non essere ad un livello tale da potersi confrontare con tale tipologia di problemi.
Problema che indipendentemente dal linguaggio comunque non è proprio di semplice risoluzione.
Lo è relativamente su una immagine (dipende da cos'altro è presente), ma su una pagina web, la vedo dura, anche perchè se il contenuto della pagina è flottante la posizione potrebbe cambiare a seconda della dimensione della finestra del browser.
Inoltre metti che la pagina o l'immagine che elabori contenga anche qualcosa come questo: " " il tuo programma facilmente lo scambierebbe per il pallino rosso da trovare.

Figurati io all'università ho passato qualche mese a cercare cartelli stradali nelle foto e si trattava in prima battuta di individuare triangoli rossi, cerchi rossi e cerchi blu, poi una rete neurale adeguatamente ammaestrata mi indicava il tipo specifico di cartello.
Riconoscere che una mela rossa bella tonda con il riflesso del flash al centro non era il cartello di divieto d'accesso ha richiesto un pò di lavoro.

Per l'elaborazione avanzata di immagini in C/C++ potresti provare con OpenCV della Intel.
Ci sono già pronte funzioni per l'estrazione dei contorni da una immagine, da lì poi bisogna vedere quali tra i contorni individuati si avvicinano il più possibile ad una circonferenza (se ti sei mai chiesto se gli esercizi di matematica sulle circonferenze avessero una qualche applicazione pratica eccoti servito).
Volendo semplificare il problema basterebbe a quel punto vedere quanto rosso c'è all'interno delle aree individuate come circonferenze.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2009, 23:21   #16
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Ti faccio un riassunto super espresso riguardante le classi, omettendo tutto ciò che non interessa ai fini della realizzazione di questo trova cerchi.

Negherò inoltre di averlo mai fatto: la faccenda è molto più interessante di quanto dirò ma è anche più lunga.

"Le classi sono un modo per impacchettare funzioni e variabili" (Alan Kay perdonami).

C'è una ragione per cui "impacchettare funzioni" ha un senso che deriva da un punto di vista che si può assumere quando si vuole scrivere un programma. Non mi dilungo sulla questione.

Una volta che hai definito una classe puoi usarla per creare delle variabili che possiedono le funzioni e le variabili definite nella classe che hai usato.

Io creo una classe, gli infilo dentro una funzione che dice "pippo" e con quella classe posso creare una variabile che dice pippo.

Le classi in C++ sono facilissime.

C'è un file di intestazione che dichiara quali variabili e funzioni ha la classe e un file sorgente in cui scrivi la definizione delle funzioni.

Prendiamo il Pixel di cui parlavo. Più che un pixel è un colore ma m'è venuto pixel, prendiamolo per buono.

Uso la notazione UML per dire che un Pixel è fatto così:

Codice:
class Pixel
    +getRosso() : int
    +getVerde() : int
    +getBlu() : int
Significa, lasciando da parte qualcosa, "Pixel è una classe che ha tre funzioni membro"

La prima si chiama getRosso() ed è una funzione senza argomenti che restituisce un intero. La seconda si chiama getVerde() ed è una funzione che restituisce un intero. La terza si chiama getBlu() e fa la stessa cosa delle altre due.

In C++ quella roba si può tradurre con il file di intestazione Pixel.h:

Codice:
#ifndef PIXEL_H
#define PIXEL_H
class Pixel {
	private:
		int rosso;
		int verde;
		int blu;

	public:
		Pixel(int, int, int);
		int getRosso();
		int getVerde();
		int getBlu();
};
#endif
e il file sorgente Pixel.cpp:

Codice:
#include "Pixel.h"
Pixel::Pixel(int r, int v, int b) {
	rosso = r;
	verde = v;
	blu = b;
}

int Pixel::getRosso() {
	return rosso;
}
int Pixel::getVerde() {
	return verde;
}
int Pixel::getBlu() {
	return blu;
}
Ora posso usare la classe Pixel per creare quante variabili di tipo Pixel voglio. Ognuna di quelle variabili avrà le tre funzioni che io ho definito per la classe Pixel.

La funzione in grassetto è "speciale", si chiama costruttore e serve per obbligare chi voglia creare istanze della classe Pixel a farlo dando un valore alle tre variabili rosso verde e blu conservate nel pixel creato.

Per creare un'istanza di Pixel (una variabile di tipo Pixel) posso dire:

Pixel p(10, 20,30)

Per usare le funzioni di p uso l'operatore "." (un punto):

int x = p.getRosso(); //x vale 10
int y = p.getVerde(); //y vale 20
int z = p.getBlu(); //z vale 30

Ad esempio:

Codice:
#include <iostream>
#include "Pixel.h"

using namespace std;

int main(int argc, char *argv[])
{
	Pixel p(10, 10, 10);
	cout << "rosso" << p.getRosso() << "\n";
	cout << "verde" << p.getVerde() << "\n";
	cout << "blu" << p.getBlu() << "\n";
    system("PAUSE");
}
Ci sei fin qui?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2009, 13:45   #17
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
si ho capito quasi tutto e leggendo il tuo post solo 1 volta... dovresti fare l' insegnante Comunque fin qua ci sono perfettamente. In poche parole con le classi io posso creare nuovi tipi di variabili che al loro interno hanno varie funzioni o parametri giusto?
Ora manca la parte di getrosso getblu getverde perchè io per ora in c++ ho lavorato solamente con caratteri e numeri, mai con immagini...
Grazie mille per le tue spiegazioni... sono in attesa della prossima lezione..
borelg è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2009, 17:36   #18
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
mi sono dimenticato di chiederti anche 1 altra cosa... ma quelle funzioni che si trovano all' interno della classe come le creo ovvero che tipo di funzioni sono normali? e a cosa servirebbero
In attesa di una tua risposta
grazie ancora in anticipo
borelg è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2009, 13:18   #19
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
up
borelg è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2009, 16:37   #20
borelg
Member
 
Iscritto dal: Apr 2008
Messaggi: 95
forse ho trovato una soluzione alternativa + semplice getpixel() è una funzione che serve per determinare il colore di un certo pixel. Quindi mi basta fare un ciclo for + questa funzione per riuscire a trovare il colore rosso (dato che come elemento rosso c'è solo il pallino) in una determinata area. Il problema però è dato che il colore del pixel lo devo prendere dalla schermata di firefox dovrei usare la funzione findwindow per operare su quella li giusto? Però se compilo il mio codice mi da sempre come ritorno le componenti rosso verde e blu del colore del pixel della schermata dalla quale viene fatto partire l' eseguibile, ovvero se metto l' eseguibile sul desktop mi da il colore di quel pixel del desktop, se lo metto in 1 nuova cartella e la ingrandisco a tutto schermo mi da bianco dato che il pixel centrale (quello che ho scelto io ) è bianco perchè la cartella è vuota... Mi diresti perchè non riesce ad identificare la finestra di firefox nonostante io gli abbia dato il titolo preciso? Ho guardato un po' in giro ed è risultato che dovrei trasformare in titolo da char a wchar possibile? se si come faccio?

Ecco il mio codice:
Codice:
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <stdio.h>

using namespace std;

int main()
{
	int x,y;
	char titolo[]="Mozilla Firefox";
	HWND firefox = FindWindow(NULL,titolo);
    x = 640;
    y = 512;    
    HDC ff = GetDC(firefox);
    COLORREF color = GetPixel(ff, x, y);
    BYTE r, g, b;
	r = GetRValue(color);
	g = GetGValue(color);
	b = GetBValue(color);
	printf ("R=%i\nG=%i\nB=%i\n",r,g,b);
    system("PAUSE");
    return EXIT_SUCCESS;
}
grazie mille in anticipo
borelg è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Amazon scatenata nel weekend: sconti sug...
Pulizia per 45 giorni senza pensieri: il...
Apple taglia il prezzo degli AirPods Pro...
Tutti i MacBook Air M4 2025 da 13 pollic...
Roborock QV 35A a 429€ o Dreame L40 Ultr...
SpaceX Starship: Ship 37 ha eseguito due...
Sharkoon punta sui case a basso costo, m...
La tua rete Wi-Fi fa pena? Questi FRITZ!...
Amazon, un weekend di fuoco per gli scon...
Ancora 3 smartwatch Amazfit in forte sco...
Sharkoon A60 RGB: dissipatore ad aria du...
HONOR 400 Pro a prezzo bomba su Amazon: ...
Offerte da non perdere: robot aspirapolv...
Apple Watch e Galaxy Watch ai minimi sto...
Il rover NASA Perseverance ha ''raccolto...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:01.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v