En esta sección, vamos a agregar lo que se denominan expresiones al código que tenemos
disponible. Y eso es como la última pieza que necesitábamos para comenzar a escribir, tú sabes,
código de manipulación de imagen un poco realista.
Y, en particular por el final de esta
sección jugaremos con rompecabezas que se basan en imágenes así que, eso será un poco divertido.
Así que, hemos escrito código como esto muchas veces. Entonces, aquí dice . Nosotros
tenemos un número, 40 o 100 o 250 o lo que sea y está en el código.
Resulta que en su lugar puedes escribir de esta manera. Entonces aquí dice . Y el
11 + 31 aquí, eso se llama una expresión. Y básicamente, en lugar de un
número fijo que se conoce de antemano, podemos poner una pequeña, una pequeña
expresión aritmética. Así que en este caso,11 + 31, es un pequeño problema. La forma en que esto funciona
es que, cuando el computador se ejecuta, cuando llega a esta línea. Lo primero que
va a hacer, es, se dice que va a evaluar la expresión.
Por lo que sólo escoge la
expresión, y dice bien. Bien, tengo que averiguar qué número se trata. En
este caso, sólo hace la adición, por lo tanto, 11 + 3, es 42. Así que una vez la
expresión ha sido evaluada a un número 42, el código puede continuar,
y sólo tiene que utilizar ese número. Así pues, en efecto, esto sólo imprime 42. Y así en cualquier lugar
del código donde habríamos tenido un número,
como 0 o 255 o 100 o algo
en su lugar vamos a ser capaces de poner pequeñas expresiones aritméticas a efectos de incorporar un
poco de computación para calcular qué número queremos que utilice. Eso nos
va a permitir resolver mejor los problemas. Bien, no hemos hablado de eso por ahora, pero
el píxel tiene estas tres funciones adicionales.
Está y lo que
hace es, es una especie de reverso de .
Recupera el número del
píxel. Así que hay algún valor rojo; 0 o 100 o algo.
Esto lo recupera.
Y están también y .
Así que va a ser muy
natural utilizar estos en expresiones para meterse con los valores RGB de un píxel. Así que
supongamos que lo que quiero hacer es doblar el valor rojo de un píxel, por lo que si es 50 quisiera
hacerlo un 100 y si es un 100 quiero hacerla un 200 o lo que sea. Así que aquí hay algo de código
que hace eso por lo que voy a pasar esto y esta idea de hacer un relativo
cambio a un píxel es cambio que usted sabe lo triple o algo parecido
ese,que va a ser una forma mucho más realista para hacer frente a los valores RGB
de los pixeles. Ahora veamos lo que hace este código. Entonces esta cita es correcta.
Dobla el valor rojo de un píxel. Así que lo que la primera línea hace, es, llama a .
Así se va a recuperar el número fuera.
Y vamos a decir, en este
caso, que el valor rojo es 50. Así, , va a recuperar el 50.
Y entonces, aquí, estamos utilizando el signo igual de la manera que hacíamos antes, para
almacenar ese número en una variable. Voy a, voy a llamarla "old" (viejo), por el, el antiguo
valor. Así que, básicamente, esto sólo almacena 50 en "old". Así entonces, la siguiente línea dice
. Así que aquí, estoy usando la expresión. Y recuerda, la
manera en que funciona es, cuando llega a esta línea, la primer cosa que va a hacer
es evaluar la expresión. Por lo que va a mirar "old" multiplicado por dos. "Old", recuerda tiene
almacenado 50. Así que, básicamente, esto dice 50 veces dos, se va a evaluar eso, devolverá 100.
Por lo tanto evalúa la expresión para llegar a 100.
Y ahora que tiene
ese valor, entonces puede seguir adelante y ejecutar el código. Y eso es lo que dice ,
esencialmente 100. Así que si piensas a través de toda la secuencia, básicamente esto
saca el 50, multiplica por dos para obtener 100 y almacena eso de nuevo.
Entonces en efecto, se multiplica por dos. Ahora. En realidad esta es la manera en que vamos a escribirlo.
Todo esto se puede condensar a sólo una línea porque, realmente esa,
esa variable "old" de ahí, no estaba añadiendo mucho.
Sólo fue como una
cosa temporal. Y así que imaginemos ese mismo caso de píxel donde el
valor rojo es 50, y yo sólo voy a ejecutar esto.
Sólo lo he condensado a una línea.
Así, imaginemos este código ejecutándose.
Entonces, tengo un píxel realmente, aquí lo
tengo. Píxel con rojo de 50 y voy a ejecutar esta línea.
Así que la primera cosa
que va a hacer es darse cuenta que hay una expresión aquí,
dos veces. Así, se va a evaluar esa expresión. Así que
vas a ir a buscar lo que es actualmente el valor rojo. Digamos 50. Por lo que dirá,
es el misma matemáticas que teníamos antes, 50 veces 2. Eso es 100. Y entonces con
ese valor 100, esencialmente va a llamar de 100 para poner eso de nuevo.
Así que funciona como la misma dinámica por la que pasamos. Por lo que obtiene el
valor, multiplica por dos y lo pone de nuevo.
O, en efecto
se duplica el valor rojo. Así que voy a hacer un montón de ejemplos que siguen, con este patrón.
Así que lo vamos a ver. Como voy a empezar a usar esto dentro de bucles
como anteriormente habíamos hecho le sabemos decir cero o 250 tuvimos algunos número fijo pero ahora
vamos a escribir código y éste es el ejemplo que acabo de hacer. Código como este donde
vamos a cambiar el valor rojo basado en lo que era el valor rojo antes. Y entonces
la dinámica es, vamos a tener, ya sabes, muy a menudo vamos a decir y entonces
en el paréntesis vamos a llamar a y luego cierta aritmética. Por lo tanto
en este caso, esta línea duplica el valor rojo, o en última instancia, esta línea llama a
de 0.5 veces. Entonces está tomando el valor viejo
y multiplicarlo 0.5 veces o esencialmente dividir por dos,
por eso va a
hacerlo más pequeño y, a continuación, colocarlo de nuevo.
Así,eso es todo, seguiremos
ese patrón, un montón de veces. Así que permítanme llegar a un ejemplo real, aquí. Supongamos que yo,
yo voy a tomar la imagen de la flor.
Y digamos que quiero que se vea
más naranja. Por lo mi estrategia va a ser, bueno, vamos a cambiar el valor de verde. Vamos a
apenas bajar el verde. Y así, matemáticamente, voy a decir, vamos a
cambiar el verde para que este al 75% de lo que era. Ahora, en este ejemplo,
realmente he comenzado la página con ningún código en ella. Por lo que voy a escribirlo ahora.
Así digo píxel, por lo tanto,
si quiero cambiar el verde al 75% de
lo que era. Y esto es, sabes, alguno
del ejemplo que mostré. Diré
. También puedes escribir esto fuera [inaudible] entones, quiero llamar a
y quiero poner aquí algún tipo de expresión, la quiero
para calcular un número que quiero devolver para el valor verde. Por lo que el patrón
que voy a usar aquí es , voy a obtener el valor antiguo y
entonces puedo, tú sabes, multiplicar tantas veces.
En este caso multiplicar 0.75
veces. Así voy cambiarlo a tres cuartas partes de lo que era. Así que vamos
a probar eso. Ah, vale. Entonces hace que sea, si recuerdan era
como amarillo. Realmente si pongo 1.0 aquí,
no podemos hacer ningún cambio. Bueno, eso era
cuando era agradable y amarillo. Entonces aquí esta tu 0.75 de nuevo.
Entonces tenemos un poco más de naranja.
Debo decir, para estos ejemplos voy a,
sólo voy a tomar el tiempo para escribir el código. Y puedes hacerlo si lo deseas
al volver sobre esto mismo. Hay un pequeño botón de "mostrar solución" aquí abajo. Por lo tanto,
si vienes a la revisión posterior, el código de la solución está disponible. Pero, solo
sentía como practicar propósitos. Es mejor comenzar con una pantalla en blanco. Y entonces
realmente pasar por el proceso de escribir el código. Por lo tanto, todos estos ejemplos seguirán
ese patrón. Vamos a intentar algo un poco más difícil. Entonces esto dice
poner el rojo, verde y azul cada uno a 0.75 de sus valores originales y, a continuación, intentaremos
con 0.5 y 0.25. ¿Qué voy a hacer?. Una GRAN tradición de ciencias de la computación, es en lugar
de escribir el código absolutamente desde el principio, yo voy a copiarlo, el que hice
antes y sólo voy a pegarlo. Voy a hacer tres copias del mismo, y luego lo arreglamos
para hacer lo que quiera aquí. Está bien, así que normalmente siempre voy en orden, rojo, verde, azul.
Así que voy a decir para y, lo que hice decir a 0.75. Bueno, por lo que
eso, eso es una buena. Y, a continuación, decimos para obtener verde 0.75 veces.
Y entonces, haremos azul al final. Así , . Puedes ver una especie de
patrón aquí del y siendo combinados.
Eso está muy bien. Es un muy
factible patrón. Así que voy a ejecutarlo así.
Sí, es un poco sutil pero lo
que ha hecho, es tomar la imagen original y hacerla un poco más oscura. Porque si
piensas sobre eso, multiplicar por 0.75 estamos como moviendo todo hacia
cero y evidentemente cero, cero es negro puro, por lo que nosotros estamos como comprimiendo así.
Así que vamos a intentar hacerlo un poco extremo. Así, podrá multiplicarse 0.5 veces y
voy a ejecutar eso. Oh, es un poco más oscuro.
Y si casi por 0.25 tan sólo un cuarto de
los valores originales. Ah, entonces sí, entonces se está haciendo bastante oscuro. Por lo tanto, esto demuestra
un realista e interesante uso de este tipo de idea de escala de usar
combinado con y multiplicarlo tantas veces para jugar
con los valores. Escalar hacia arriba o escalar hacia abajo. Muy bien. Así que hay un,
un tercer problema aquí, yo voy a saltarlo. Este es sólo para práctica extra,
si quieres ven y prueba este y tiene un, tiene un código de solución
también. Así que lo que realmente quiero hacer,
es trabajar uno de estos 5-10-20
puzzles(rompecabezas). Así que la idea con el rompecabezas 5-10-20 es que hubo alguna
imagen de una flor, pieza de fruta o algo y se ha modificado
y se ha modificado de manera que los valores rojos, verdes y azules han sido todos divididos por
cinco, diez o veinte. Por lo que los valores son mucho más pequeños, las imágenes podrían ser
realmente oscuras y el desafío, es multiplicar los valores rojos, verdes y azules
por cinco, diez o veinte.
Esencialmente "deshacer" el oscurecimiento
para de algún modo regresar la imagen. Y así. Así como esto solo [inaudible] sólo desciende a algunos
experimentando y jugando un poco para tratar de averiguar cómo obtener la
imagen de nuevo. Entonces el número cinco se utiliza una vez, el número diez una vez y el
número veinte se utiliza una vez, así que básicamente sólo tienes que averiguar cuál
va con qué color. Y debo decir, sabes hay sólo seis posibles formas de
tener cinco diez y veinte por lo que no hay realmente mucho por lo que pasar. La
forma en que pienso es bueno quizas puedes imaginar los cinco primero es rojo y
así está bien, cinco es la primera y entonces es bien cinco, diez, veinte. O
cinco, veinte, diez. Así que si cinco es la primera hay sólo dos posibilidades y entonces
Asimismo si diez primeros hay sólo dos posibilidades y si veinte es la primera
hay es sólo dos posibilidades, así que es una forma puede tipo de organización
mientras tu buscas a través de este, bien permítanme permítanme volver aquí. Como ya he dicho
antes y agarrar, una copia de mi código así no empezamos con nada. Bueno, en
este caso lo que tenemos es un, un plátano.
En realidad, aquí, voy a, voy a comentar estas]
líneas fuera por un segundo, por lo que sólo podemos ver lo que ve la imagen con nada. Por lo tanto
existe la imagen de rompecabezas. Y lo que muestra-, te voy a decir. Hay una banana
amarilla y está sobre un fondo de ladrillo rojo oscuro. Y entre los ladrillos rojos,
hay un poco de musgo verde que se puede ver. Así que si se fija la imagen, nos
debería poder ver todas esas cosas.
Para corregir la imagen. Lo que quiero hacer aquí
es multiplicar. Permite, sólo me va a... Voy a empezar sólo con cinco, diez, veinte como
estos. Así que vamos a decir, bien vamos a adivinar que el rojo debe ser multiplicado por cinco,
necesita ser multiplicado por diez el verde y el azul tiene que ser multiplicado por
veinte. Su sólo una suposición. Por tanto, si hago eso. Mm-hm, bien, bien, que
claramente equivocada, verdad? El banano no se ve muy bien. Y los ladrillos tienen esto
elenco de azul, por lo no es bueno. Así que voy, me quedo con la suposición de que
los cinco es el primero, aunque. Y voy a tratar otra permutación. Muy bien, así que, bien
tal vez es cinco, veinte, diez.
Así lo probaré así. Ah, y eso es peor.
[risa] >> Bien. Por lo tanto, no creo que los cinco es el primero. Cuando traté de las dos maneras
con los cinco primeros. Así que vamos a tratar de los diez primeros, así que voy a tratar de diez. 520. Bien, por lo que
Sólo estoy escala estos. Ew, hm. ¿Bueno, quiero decir que creo que estamos recibiendo, derecho? Quiero
decir el plátano parece bastante bueno, pero obviamente son los ladrillos, que sabemos no es
purpura. [risa] Se supone que es rojo. Así que permítanme intentar, estoy
va a intentar dejando los cinco en el medio y sólo poniendo el 20 primero. Veinte,
cinco, diez, vamos a intentar que. Allí lo tenemos. Existe la banana, se ve bonita y
amarilla. Puede ver los ladrillos tienen este color rojo oscuro. Y, a continuación, incluso un poco
de musgo verde aquí. Eso es tranquilizador. Así que voy a acercar esto,
para poder mostrarte. [inaudible] algunas, algunas de las cualidades de la misma. Entonces parcialmente esta,
esta el ladrillo. Y el musgo y los plátanos se ven bien. Sólo hay una
cosa menor, pero usted verá hay tipo de un, consulte hay una especie de este banding horizontal
en el plátano y está bien es que es el aspecto de la solución
cuando tu la haces rápidamente. Eso está sucediendo porque cuando el rojo, verde y azul cuando
fueron divididos por este número por diez o quizás veinte todos aquellos valores que
normalmente van a cero a cincuenta cinco que se comprimen hasta que quizás sólo van
cero a cero a veinte cuatro o doce. Y como resultado... Porque eran
comprimido a ese rango, hubo pocos matices de amarillo disponible,
Cuando se fue comprimida abajo como ese. Y aun cuando ampliamos lo copia de seguridad, estamos
sigue atascado con sólo esos pocos matices. Eso es lo que estamos viendo en estos
banda horizontal, existe, hubo pocos tonos diferentes
amarillo. Y eso no se ha podido capturar.
Voy a ampliar un poco. Es incapaz de
captura. Estudios gradaciones reales, los que se desee. Y eso es sólo una especie de,
un artefacto de la forma, el que trabaja este ejercicio. Muy bien. Así, los ejercicios que
siguen en esta sección son realmente poco más de estos cinco, diez, veinte puzzles. Por lo tanto,
es algo que debes chequear.