I wrote an example of blurring color picture by using PCA from scikit-learn:

import cv2
import numpy as np
from sklearn.decomposition import PCA
pca = PCA(n_components = 0.96)
img = cv2.imread("input.jpg")
reduced = pca.fit_transform(img)
res = pca.inverse_transform(reduced)
cv2.imwrite('output.jpg', res.reshape(shape))

But it reports

ValueError: Found array with dim 3. Estimator expected <= 2.

The correct solution is transforming image to 2 dimensions shape, and inverse transform it after PCA:

img = cv2.imread('input.jpg')
shape = img.shape
img_r = img.reshape((shape[0], shape[1] * shape[2]))
reduced = pca.fit_transform(img_r)

It works very well now. Let's see the original image and blurring image:



Original Image



Blurring Image