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