# Image Pyramid basics demo - # Reduce an image in size by 1/2 ( edge length) -or- 1/4 (area) # With simple sampling (produces aliasing!) # # Jay Summet 2015 # #Python 2.7, OpenCV 2.4.x # import cv2 import numpy as np def scaleTo8Bit(image, displayMin = None, displayMax=None ): if displayMin == None: displayMin = np.min(image) if displayMax == None: displayMax = np.max(image) np.clip(image, displayMin, displayMax, out=image) image = image - displayMin cf = 255. / (displayMax - displayMin) imageOut = ( cf * image).astype(np.uint8) return imageOut #Linux window threading setup code. cv2.startWindowThread() cv2.namedWindow("Original") cv2.namedWindow("Reduced 1") cv2.namedWindow("Reduced 2") cv2.namedWindow("Reduced 3") #Load source / input image as grayscale, also works on color images... imgIn = cv2.imread("oscar512.png", cv2.IMREAD_GRAYSCALE) cv2.imshow("Original", imgIn) imgIn = imgIn.astype(np.float32) #Make a reduced image NOT from the gausing blurred version! reduced1 = imgIn[::2,::2] reduced1_8 = scaleTo8Bit(reduced1) cv2.imshow("Reduced 1", reduced1_8) #Do it agian! reduced2 = reduced1[::2,::2] reduced2_8 = scaleTo8Bit(reduced2) cv2.imshow("Reduced 2", reduced2_8) #Do it a third time! reduced3 = reduced2[::2,::2] reduced3_8 = scaleTo8Bit(reduced3) cv2.imshow("Reduced 3", reduced3_8) #Write the result! cv2.imwrite("oscarReduced.png", reduced3) cv2.waitKey(0)