bonjour à tous,

Dans le cadre de nos études d'ingénieur, nous avons un projet informatique à réaliser sur SWIFT mais étant plutôt faible en informatique les problèmes sont apparus assez rapidement. je vous explique le concept de notre programme : nous avons plusieurs images que nous devons lire et en extraire les différents pixels des couleurs primaires afin de les regrouper dans des tableaux pour ensuite réaliser un histogramme de la distribution des pixels en fonction de l'intensité de ces derniers... et c'est la qu'arrive le problème.

nous avons réussi à regrouper les pixels dans trois tableaux différents pour les trois couleurs primaires mais impossible de réaliser l'histogramme .... pouvez vous nous aider ou au moins nous donner un axe de travail ???

Nous avions pensé à réaliser trois histogrammes ( un serait apparement trop complexe pour notre niveau ) pour chaque couleur primaire. Nous aimerions regrouper chaque intensité de pixel dans des tableaux correspondants pour ensuite pouvoir tracer l'histogramme en fonction du nombre de pixels.

Ci dessous les lignes de code de notre programme qui nous permettent de lire une image et de regrouper les pixels dans leurs tableaux correspondants aux couleurs primaires.

merci d'avance de nous sauver d'un naufrage plus que certain.

PS: L'image se trouve en pièce jointe
PSS: on a pas gagné la guerre ...

Test_Quadrillage.eps.pdf

//
// main.swift
// TP projet CSTS
//
// Created by Cedric Schwartz on 09/10/2017.
// Copyright © 2017 Cedric Schwartz + ts. All rights reserved.
//

import Foundation
print("Hello World")
let chemin = "/Users/17013298/Desktop/Traitement_Images/Test_Quadrillage.eps"
var i = Int() // compteur de lignes
var vide2: NSString? // création d'un second tableau vide dans lequel on stocke les NSString
var vide = [String]() // stockage des valeurs en String
var base10 = [Int]() // création d'un tableau en base 10
var poubelle : String
var Rouge = [String]()
var Vert = [String]()
var Bleu = [String]()
var bob : NSString?
//var nb : Int(readLine()!)!
var Tom: String = ""
var car : String
var L : Int=0
//var p = Int=0
var Im = [[[Int]]]()
var ImR = [[Int]]()
var ImV = [[Int]]()
var ImB = [[Int]]()
var rouge = [Int]()
var bleu = [Int]()
var vert = [Int]()
var valeur = [Int]()
var p : Int = 0
var z : Int = 0
var n : Int = 0


do {
poubelle=""
var poubelle2: NSString?
let str = try String(contentsOfFile : chemin) // scan de note fichierfor i in 1 ... n {
let monScan = Scanner(string: str)



monScan.scanUpTo ("% Image Geometry", into : &poubelle2) //scan du fichier pour récupérer les dimensions de notre image
monScan.scanUpToCharacters(from: CharacterSet.newlines, into: &poubelle2)
monScan.scanInt(&n)
Swift.print(n)
monScan.scanInt(&p)
Swift.print(p)
monScan.scanInt(&z)
Swift.print(z)


var j : Int = 0
//var cool : Int = 0

for i in 1...n*p{

monScan.scanUpTo("colorimage", into : &poubelle2) // permet de mettre les 26 premières lignes dans une variable poubelle
monScan.scanUpToCharacters(from: CharacterSet.newlines, into: &poubelle2)
poubelle.append(String(poubelle2!))
monScan.scanUpToCharacters(from: CharacterSet.newlines, into : &vide2)

for car in String(describing: vide2!).characters {


//Swift.print(car) // permettre de lire les caractères les uns après les autres en colonne

//_ = readLine()!
L = L+1 // permet de parcourir la chaîne de caractères à l'aide d'un compteur
if L <= 1 { // permet de parcourir la première valeur de la chaîne de caractère

Tom.append(car) // affecte la première valeur de car dans Tom
// print (">",Tom) // on vérifie ce qui est affiché dans Tom

} else { // on parcourt ensuite le reste de la chaîne de caractères

Tom.append(car) // on affecte la valeur suivante de car dans Tom
// print("<",Tom)
let val = Int(Tom, radix : 16) // conversion des valeurs de Tom d'une base 16 à une base 10 pour faciliter la lecture du fichier
L=0 // Le compteur est remis à 0
Tom = ""
valeur.append(val!)

}



// On réinitialise la chaîne de caractères Tom
//print(val!) // On affiche la valeur de val converti en base 10
//_ = readLine()!



}


/* let ImR = val[1] + 3 //faux
print (ImR) // il faut maintenant qu'on regroupe nos valeurs de R,V et B dans 3 tableaux à 2D. ll faut qu'on réussisse à séparer notre chaîne de caractères au bon endroit.*/


}

}

//print(valeur)




/*let valeur1 = valeur[0]
print ("valeur:",valeur1)*/ //Cela nous sert à vérifier que l'on peut lire la première valeur du tableau'

//Swift.print("n: \(n))")

// print (" le nombre de pixels par ligne correspond à la deuxième valeur de bob")
// print ("donnez la valeur de p")

for j in 1...n*p{

//Swift.print(3*(j-1)+0,3*(j-1)+1,3*(j-1)+2)


let ImR = valeur[0+3*(j-1)] // permet de couper la chaîne de caractères pour récupérer les valeurs rouge
let ImV = valeur[1+3*(j-1)]
let ImB = valeur[2+3*(j-1)]

rouge.append(ImR) // permet d'affecter les valeurs de rouge de valeur au tableau rouge
bleu.append(ImB)
vert.append(ImV)

}
print("rouge",rouge)
print("vert",vert)
print("bleu",bleu)

//print(valeur)
vide.append(String(vide2!)) // Transfert de vide 2 à vide`