User Tools

Site Tools


cs401r_w2016:lab1

This is an old revision of the document!


Objective:

Get started with python, ipython notebooks and anaconda.

Deliverable:

An ipython notebook that generates a random image. We will run this notebook 5 times; it should generate 5 different, moderately complex images. Each image should be 512 x 288. Have fun with it!

The resulting image could, for example, look like this:

Description:

Throughout this class, we will be using a combination of ipython notebooks and the anaconda python distribution. For this lab, you must install anaconda, and write a simple python program (using ipython notebooks) and use it to generate simple random images.

You can generate any sort of random image that you want – consider random lines, random curves, random text, etc. Each time the program is run, it should generate a different random image. Your image should have at least 50 random elements (they can all be the same type, such as random lines, and can be created in a loop). We won't count the number of elements; this is just to encourage you to create random images with moderate complexity.

In preparation for future labs, we strongly encourage you to use the cairo package as part of your image generator.

Installing anaconda:

http://docs.continuum.io/anaconda/install

To generate images, check out PIL and cairo:

conda install cairo

To generate random numbers, check out the numpy.random module.

To create a new notebook, run:

jupyter-notebook

This should start an ipython kernel in the background, set up a webserver, and point your browser to the webserver. In the upper-right corner, you will see a “new” menu; under that menu you should see “Notebook” and “Python 2”. This will create a new notebook.

Here's some starter code to help you generate an image. The nbimage function will display the image inline in the notebook:

import cairo
import numpy
 
# A simple function to display an image in an ipython notebook
def nbimage( data ):
    from IPython.display import display, Image
    from PIL.Image import fromarray
    from StringIO import StringIO
 
    s = StringIO()
    fromarray( data ).save( s, 'png' )
    display( Image( s.getvalue() ) )
 
WIDTH = 512
HEIGHT = 288
 
# this is a numpy buffer to hold the image data
data = numpy.zeros( (HEIGHT,WIDTH,4), dtype=numpy.uint8 )
 
# this creates a cairo context based on the numpy buffer
ims = cairo.ImageSurface.create_for_data( data, cairo.FORMAT_ARGB32, WIDTH, HEIGHT )
cr = cairo.Context( ims )
 
# draw a blue line
cr.set_source_rgba( 1.0, 0.0, 0.0, 1.0 )
cr.set_line_width( 2.0 )
cr.move_to( 0.0, 0.0 )
cr.line_to( 100.0, 100.0 )
cr.stroke()
 
# display the image
nbimage( data )
cs401r_w2016/lab1.1450905592.txt.gz · Last modified: 2021/06/30 23:40 (external edit)