Stitching images together Opencv -Python
Question: My program takes in an image and crops the image into seperate images
according to the scale parameter, e.g. scale = 3 produces 9 images of equal
size. I then work out mean rgb of each cropped image and set all pixel values
in the image equal to the mean rgb value.

I am wondering how I can stich the cropped images back together to output one
image? Which in this case would be a grid of nine different colours.

Here is my code:

    
    
    # import packages
    import numpy as np
    import cv2
    import dateutil
    import llist
    from matplotlib import pyplot as plt
    import argparse
    
    #Read in image
    img = cv2.imread('images/0021.jpg')
    
    scale = 3
    #Get x and y components of image
    y_len,x_len,_ = img.shape
    
    mean_values = []
    for y in range(scale):
        for x in range(scale):
            #Crop image 3*3 windows
            cropped_img=img[(y*y_len)/scale:((y+1)*y_len)/scale,
                              (x*x_len)/scale:((x+1)*x_len)/scale]
    
            mean_val=cv2.mean(cropped_img)
            mean_val=mean_val[:3]
            #Set cropped img pixels equal to mean RGB
            cropped_img[:,:,:] = mean_val
    
            cv2.imshow('cropped',cropped_img)
            cv2.waitKey(0)
    
            #Print mean_values array
            #mean_values.append([mean_val])
    #mean_values=np.asarray(mean_values)
    #print mean_values.reshape(3,3,3)
    

As it stands the nested for loop iterates over the image and outputs the
images (which are just blocks of one colour) in the order that I want to
stitch them together, but im not sure how to achieve this.


Answer: I don't know if such things exist in OpenCV, but in ImageMagick you can simply
resize the image down to the tile-size (which will implicitly average the
pixels) and the re-scale the image back up to the original size without
interpolation - also called _Nearest Neighbour Resampling_. Like this:

![enter image description here](http://i.stack.imgur.com/eaTCX.jpg)

    
    
    # Get original width and height
    identify -format "%wx%h" face1.jpg
    500x529
    
    # Resize down to, say 10x10 and then back up to the original size
    convert face1.jpg -resize 10x10! -scale "${geom}"! out.jpg
    

![enter image description here](http://i.stack.imgur.com/ofFDj.png)

Per your original, 3x3 becomes:

    
    
    convert face1.jpg -resize 3x3! -scale "${geom}"! out.jpg
    

![enter image description here](http://i.stack.imgur.com/gMZoq.jpg)

and 3x5 becomes:

    
    
    convert face1.jpg -resize 3x5! -scale "${geom}"! out.jpg
    

![enter image description here](http://i.stack.imgur.com/fLKQJ.jpg)

