#!/usr/bin/env python # coding: utf-8 # In[1]: import cv2 as cv import numpy as np # In[2]: img = cv.imread('reflections.jpg') # In[9]: def BGR2YCbCr(bgrimg): ycbcrimg = np.empty(bgrimg.shape, np.float32) for r in range(bgrimg.shape[0]): for c in range(bgrimg.shape[1]): #ycbcrimg[r,c,0] = bgrimg[r,c,0]*0.114 + bgrimg[r,c,1]*0.587 + bgimg[r,c,2]*0.299 ycbcrimg[r,c,0] = sum(bgrimg[r,c]*np.array([0.114,0.587,0.299])) ycbcrimg[r,c,1] = 128 + sum(bgrimg[r,c] * np.array([0.5, -0.331264,-0.168736])) ycbcrimg[r,c,2] = 128 + sum(bgrimg[r,c] * np.array([-0.08132, -0.418688,0.5])) return ycbcrimg # In[5]: img.shape # In[17]: def YCbCr2BGR(ycbcrimg): bgrimg = np.empty(ycbcrimg.shape, np.uint8) for r in range(ycbcrimg.shape[0]): for c in range(ycbcrimg.shape[1]): # I have a row r and col c blue = ycbcrimg[r,c,0] + 1.772 * (ycbcrimg[r,c,1] - 128) if blue < 0: blue = 0 elif blue > 255: blue = 255 bgrimg[r,c,0] = blue green = ycbcrimg[r,c,0] - 0.344136 * (ycbcrimg[r,c,1] - 128) - \ 0.714136 * (ycbcrimg[r,c,2] - 128) if green < 0: green = 0 elif green > 255: green = 255 bgrimg[r,c,1] = green red = ycbcrimg[r,c,0] + 1.402 * (ycbcrimg[r,c,2] - 128) if red < 0: red = 0 elif red > 255: red = 255 bgrimg[r,c,2] = red return bgrimg # In[18]: ycbcr_image = BGR2YCbCr(img) # In[19]: bgr_image = YCbCr2BGR(ycbcr_image) # In[20]: cv.imshow('original', img) cv.imshow('converted back and forth', bgr_image) cv.waitKey(0) cv.destroyAllWindows() # In[21]: diffimg = img - bgr_image # In[22]: cv.imshow('should be black', diffimg) cv.waitKey(0) cv.destroyAllWindows() # In[23]: diffimg[0,0] # In[24]: yblurred = cv.GaussianBlur(ycbcr_image[:,:,0], [11,11], 4) # In[25]: yblurred.shape # In[26]: ycbcr_image[:,:,0] = yblurred # In[27]: blurred_image = YCbCr2BGR(ycbcr_image) # In[28]: cv.imshow('original', img) cv.imshow('blurred', blurred_image) cv.waitKey(0) cv.destroyAllWindows() # In[ ]: