Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Niveaux de gris

7 réponses
Avatar
Sécurité Pointage & Biométrie
Bonjour,

Il y a quelque temps quelqu'un avait demandé comment convertir une image
couleur en image noir et blanc (niveaux de gris), il semble que ma réponse
n'ait pas été publiée, je redonne donc une solution que j'utilise :

// **************************************
PROCEDURE pNiveauGris(cChampImage)

// cChampImage est le nom de l'image à traiter
// Si le nom de l'image est (par exemple) Image1,
// l'appel de la procédure se fait par :
// pNiveauGris("Image1")

eNiveauGris est un entier
elCouleur est un entier sur 4 octets
xMax est un entier = {cChampImage,indChamp}..Largeur
yMax est un entier = {cChampImage,indChamp}..Hauteur
x,y sont des entiers

POUR x=1 A xMax
POUR y=1 A yMax
elCouleur = dPixelCouleur(cChampImage,x,y)
eNiveauGris = (modulo(elCouleur,0x100) + modulo(elCouleur / 0x100,0x100) +
(elCouleur / 0x10000))/3
STOP SI eNiveauGris > 255
dPoint(x,y,RVB(eNiveauGris,eNiveauGris,eNiveauGris))
FIN
FIN

// **************************************

--
Sincères salutations

Jean-Claude FLAJOULOT
Email : sp_nospamm_etb@tiscali.fr
(otez _nospamm_ pour me contacter)
Sécurité Pointage & Biométrie
http://sp-et-b.chez-alice.fr/

7 réponses

Avatar
Sécurité Pointage & Biométrie
Précision, vous pouvez supprimer la ligne :
STOP SI eNiveauGris > 255
qui ne sert que pour le débogage.

--
Sincères salutations

Jean-Claude FLAJOULOT
Email :
(otez _nospamm_ pour me contacter)
Sécurité Pointage & Biométrie
http://sp-et-b.chez-alice.fr/
Avatar
Georges Peyre
Bonjour,


NOTA :
Les exemples sont en DOS brut
Pour l'execution des commandes DOS il est conseillé d'utiliser la
classe cWDDos du site RBESSET
http://www.wdforge.org/modules/icontent/index.php?page5



Pour manipuler les images ( rotations, niveaux de gris,
redimensionnement, conversions, infos EXIF des images numériques )
lorsque Windev ne sait pas faire, il est possible d'utiliser des
programmes DOS.

Ces programmes s'appellent JPEGTRAN, NCONVERT et JHEAD
Ce sont des programmes dont les phases exécutables de faible volume
sont simplement à copier dans le répertoire de travail de l'application
qui les utilise.

Pour extraire les infos EXIF : utiliser JHEAD à récupérer sur le site
suivant :
http://www.sentex.net/~mwandel/jhead/
électionner le module : Pre-built Windows executable jhead.exe
Les commandes paramétrables sont ici :
http://www.sentex.net/~mwandel/jhead/usage.html

Pour les niveaux de gris et les rotations de fichiers JPEG sans perte
des informations EXIF utiliser le programme JPEGTRAN à récupérer sur le
site suivant :
http://membres.lycos.fr/photocanon/konica/liens.htm
Pour télécharger rechercher dans la page la ligne :
Télécharger Jpegtran sur le site FTP de ULead ou sur SimTel.
Les commandes paramétrables sont ici :
http://linux.about.com/library/cmd/blcmdl1_jpegtran.htm

Pour les conversions d'images y compris des formats non utilisés par
Windev utiliser NCONVERT à récupérer sur le site suivant :
http://www.xnview.com/
Dans la colonne gauche, sous NCONVERT cliquer sur Telecharger,
Puis au bas de la nouvelle page ...
Téléchargement direct pour Windows
Cliquez ci-dessous pour télécharger
la dernière version de NConvert pour
Windows
Cliquer sur Télécharger !
Les commandes sont à récupérer dans les fichiers .TXT qui sont aussi
dans le fichier téléchargé

---------- OBSERVATIONS --------------------

Ces programmes sont très puissants il sont tous utilisables de la même
façon c'est à dire :
Créer un fichier .BAT contenant la commande du programme
Lancer l'exécution du fichier .BAT avec LanceAppli
Pour obtenir la vitese maxi du DOS ne pas iconiser l'application, mais
plutot cacher la fenêtre MSDOS en mettant la fenêtre appelante de la
procédure audessus.tout

Voici un exemple d'utilisation avec JHEAD pour son utilisation sous
Windev pour éditer les infos EXIF

PrgLance est une chaîne // contiendra la ligne commande DOS
WInfosExif est une chaine

SI PAS LNomImage = "" ALORS
Sablier(Vrai)
// cette ligne commande constitue le fichier IMGEXIF.TXT
// qui contiendra le texte des informations
// nota : sous W98 il faut utiliser CLS au lieu de EXIT
// pour fermer la fenêtre MS-DOS
PrgLance = "jhead.exe " + LNomImage + " >"+ fRepEnCours() +
"IMGEXIF.TXT"
+ RC + "CLS"
// il faut constituer un fichier .bat qui servira à lancer
// la commande DOS
fSauveTexte("AFFEXIF.BAT",PrgLance)
// il faut cacher la fenêtre DOS sous la fenêtre Windev
// appelante car exeIconise ralentit la vitesse de fermeture
// de la fenêtre MS-DOS
FenEtat("MaFenetreApelante",DessusTout)
// ne pas utiliser exeIconise mais exeActif
LanceAppli("AFFEXIF.BAT",exeActif,Vrai)
// restitue le niveau d'affichage de la fenêtre appelante
FenEtat("MaFenetreAppelante",Normal)
WInfosExif = FChargeTexte(fRepEnCours() + "IMGEXIF.TXT")
Sablier(Faux)
Info(WInfosExif)
SINON
Erreur("Aucune image n'est presente")
FIN

--------------------------------

autre exemple pour passer un image en gamme de gris avec JPEGTRAN

SI PAS WImageATourner = "" ALORS
Sablier(Vrai)
PrgLance = "jpegtran.exe -grayscale -optimize -trim -copy all " +
WImageATourner + " " + WImageResultat + RC + "CLS"
fSauveTexte("ROTATCLS.BAT",PrgLance)
FenEtat("FenetreEnCours",DessusTout)
LanceAppli("ROTATCLS.BAT",exeActif,Vrai)
fCopieFichier(WImageResultat, WImageConservee)
FenEtat("FenetreEnCours",Normal)
WImageAffichee = WImageResultat
Sablier(Faux)
SINON
Erreur("Aucune image n'est presente")
FIN

--------------------------------------------------------
Autre exemple avec NCONVERT pour redimensionner une image en conservant
le ratio Hauteur/Largeur

// nconvert -out jpeg -ratio -resize 480 0 *.jpg
WRedParametre = ""
SI WRedRatio = Vrai ALORS WRedParametre = WRedParametre + " -ratio "
WRedParametre = WRedParametre + " -resize " + WRedLargeur + " " +
WRedHauteur
WRedParametre = WRedParametre + " -rtype " + WRedMethode + " "
SI PAS WImageATourner = "" ALORS
Sablier(Vrai)
// avec nconvert l'image traitée est directement celle donnée à traiter
PrgLance = "nconvert.exe " + WRedParametre + " " + WImageConservee + RC
+ "CLS"
fSauveTexte("ROTATCLS.BAT",PrgLance)
FenEtat("Recherche de fichiers",DessusTout)
LanceAppli("ROTATCLS.BAT",exeActif,Vrai)
FenEtat("Recherche de fichiers",Normal)
WImageAffichee = WImageConservee
Sablier(Faux)
SINON
Erreur("Aucune image n'est presente")
FIN

---------------------

Cordialement

--
Elle est pas belle la vie ?
Avatar
Georges Peyre
Ce que sont les exemples avec l'utilisation de la classe cWDDos de
RBESSET


//autre exemple pour passer un image en gamme de gris avec JPEGTRAN
SI PAS WImageATourner = "" ALORS
Sablier(Vrai)
// procedure utilisant la classe cWDDOS
PrgLance = "cmd.exe /C jpegtran.exe -grayscale -optimize -trim -copy
all " + WImageATourner + " " + WImageResultat + RC + "CLS"
WtxtResultat = ""
WtxtCmd = PrgLance
PExecuteCommandeDos()
fCopieFichier(WImageResultat, WImageConservee)
WImageAffichee = WImageConservee
Sablier(Faux)
SINON
Erreur("Aucune image n'est presente")
FIN

//autre exemple pour changer la valeur GAMMA d'une image NCONVERT
SI PAS WImageATourner = "" ALORS
Sablier(Vrai)
// avec nconvert l'image traitée est directement celle donnée à traiter
// procedure utilisant la classe cWDDOS
PrgLance = "cmd.exe /C nconvert.exe -gamma " + WValeurGamma + " " +
WImageConservee
WtxtResultat = ""
WtxtCmd = PrgLance
PExecuteCommandeDos()
WImageAffichee = WImageConservee
Sablier(Faux)
SINON
Erreur("Aucune image n'est presente")
FIN



//autre exemple pour REDIMENSIONNER une image avec NCONVERT

WRedParametre = ""
SI WRedRatio = Vrai ALORS WRedParametre = WRedParametre + " -ratio "
WRedParametre = WRedParametre + " -resize " + WRedLargeur + " " +
WRedHauteur
WRedParametre = WRedParametre + " -rtype " + WRedMethode + " "
SI PAS WImageATourner = "" ALORS
Sablier(Vrai)
// avec nconvert l'image traitée est directement celle donnée à traiter
// procedure utilisant la classe cWDDOS
PrgLance = "cmd.exe /C nconvert.exe " + WRedParametre + " " +
WImageConservee
WtxtResultat = ""
WtxtCmd = PrgLance
PExecuteCommandeDos()
WImageAffichee = WImageConservee
DetermineModeImage
Sablier(Faux)
SINON
Erreur("Aucune image n'est presente")
FIN


// utilisation de cWDDos
PROCEDURE PExecuteCommandeDos()
WtxtResultat = ""
MyDos:CommandLine_Let(WtxtCmd)
MyDos:ExecuteCommand()

--
Elle est pas belle la vie ?
Avatar
Sécurité Pointage & Biométrie
Bonjour,

Juste quelques questions :
- Cela fontionne t'il aussi avec des images autre que jpg ?
- Comment fait t'on pour les licences à la vente de notre appli ?
- Cela ne peut être employé qu'avec des images déjà enregistrées sur disque,
comment faites vous avec des images de caméras en live ?

--
Sincères salutations

Jean-Claude FLAJOULOT
Email :
(otez _nospamm_ pour me contacter)
Sécurité Pointage & Biométrie
http://sp-et-b.chez-alice.fr/
Avatar
Georges Peyre
Bonjour

Sécurité Pointage & Biométrie a présenté l'énoncé suivant :
Bonjour,

Juste quelques questions :
- Cela fontionne t'il aussi avec des images autre que jpg ?


oui nombreux formats

- Comment fait t'on pour les licences à la vente de notre appli ?


Cette question ne se pose pas pour moi : voir sur les sites présents
dans mon message initial

- Cela ne peut être employé qu'avec des images déjà enregistrées sur disque,
comment faites vous avec des images de caméras en live ?


N'ayant pas ce problème non plus : voir également sur les divers sites

Si tu trouves les réponses il serait bien d'avoir tes conclusions car
la vitesse d'exécution est rapide et la qualité des images obtenues par
ces programmes est absolument impeccable du moins pour ce que j'ai pu
constater en JPEG.

Cordialement









--
Elle est pas belle la vie ?
Avatar
Sécurité Pointage & Biométrie
"Georges Peyre" a écrit dans le message de news:

Bonjour

Sécurité Pointage & Biométrie a présenté l'énoncé suivant :
Bonjour,

Juste quelques questions :
- Cela fontionne t'il aussi avec des images autre que jpg ?


oui nombreux formats




Intéressant.

- Comment fait t'on pour les licences à la vente de notre appli ?


Cette question ne se pose pas pour moi : voir sur les sites présents dans
mon message initial




J'ai visité les sites, et pour moi, la question des licences risque de se
poser.

- Cela ne peut être employé qu'avec des images déjà enregistrées sur
disque, comment faites vous avec des images de caméras en live ?


N'ayant pas ce problème non plus : voir également sur les divers sites




La je suis en plein au coeur du problème, je traite en live les images
provenant de 16 caméras (soit 16 fois 24 images seconde) j'enregistre en
continu les images couleur sous format AVI, par contre les images converties
en NB (cette conversion m'est indispensable pour effectuer certains
traitements) sont traitées directement sans passer par le HD ma formule
fonctionne et le passage par des morceaux de programme DOS ne me séduit pas
vraiment pour effectuer les traitements que j'ai à faire.
De plus Windev permet de traiter directement et presque aussi rapidement
qu'en C.

--
Sincères salutations

Jean-Claude FLAJOULOT
Email :
(otez _nospamm_ pour me contacter)
Sécurité Pointage & Biométrie
http://sp-et-b.chez-alice.fr/
Avatar
ricardinio
Le lundi 02 Janvier 2006 à 11:52 par Sécurité Pointage & Biométrie :
Bonjour,
Il y a quelque temps quelqu'un avait demandé comment convertir une image
couleur en image noir et blanc (niveaux de gris), il semble que ma
réponse
n'ait pas été publiée, je redonne donc une solution que
j'utilise :
// **************************************
PROCEDURE pNiveauGris(cChampImage)
// cChampImage est le nom de l'image à traiter
// Si le nom de l'image est (par exemple) Image1,
// l'appel de la procédure se fait par :
// pNiveauGris("Image1")
eNiveauGris est un entier
elCouleur est un entier sur 4 octets
xMax est un entier = {cChampImage,indChamp}..Largeur
yMax est un entier = {cChampImage,indChamp}..Hauteur
x,y sont des entiers
POUR x=1 A xMax
POUR y=1 A yMax
elCouleur = dPixelCouleur(cChampImage,x,y)
eNiveauGris = (modulo(elCouleur,0x100) + modulo(elCouleur / 0x100,0x100) +
(elCouleur / 0x10000))/3
STOP SI eNiveauGris > 255
dPoint(x,y,RVB(eNiveauGris,eNiveauGris,eNiveauGris))
FIN
FIN
// **************************************
--
Sincères salutations
Jean-Claude FLAJOULOT
Email :
(otez _nospamm_ pour me contacter)
Sécurité Pointage & Biométrie
http://sp-et-b.chez-alice.fr/
Bonjour, déjà merci pour avoir donné ta procédure qui fonctionne à merveille mais seulement a 99% xD
en fait pour que tout les pixes soient convertis il faut initialiser x à 0 et y à 0 cf doc windev
https://doc.pcsoft.fr/fr-FR/?3029014
merci a plus