Skip to content

Instantly share code, notes, and snippets.

@ahmadali-jamali
Created September 19, 2022 16:57
Show Gist options
  • Save ahmadali-jamali/d1e690cc4176abc8fcdacbd9ce978f02 to your computer and use it in GitHub Desktop.
Save ahmadali-jamali/d1e690cc4176abc8fcdacbd9ce978f02 to your computer and use it in GitHub Desktop.
Image convert to water color paint by python code
#---------------------------
#library
import numpy as np
import pandas as pd
from numpy import argmax
import matplotlib.pyplot as plt
import math
import statistics
import cv2
from matplotlib import pyplot as plt
#----------------------------
#colors clusters of original image
d = open("pixel.csv", "rb") #the image should be clustered by K-means before and prepared the color unique in an array
main_data= np.load(d)
np.array(main_data)
print(main_data)
twod = []
for i in range(len(main_data)):
twod.append(sum(main_data[i])//3)
print(twod)#id color
print('--')
#----------------------------
#original 2D image:
img0 = cv2.imread('1.jpeg',0)
#----------------------------
#color clustered of original image
path = 'k.jpeg'
img = cv2.imread(path)
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
twodk = []
for i in range(len(img)):
twodk2 = []
for j in range(len(img[0])):
twodk2.append(sum(img[i][j])//3)
twodk.append(twodk2)
twodk = np.array(twodk)
#----------------------------
#smoothing
for i in range(len(img)):
for j in range(len(img[0])):
c = 0
ls = []
for l in range(len(main_data)):
c = abs(twodk[i][j] - twod[l])
ls.append(c)
for m in range(len(ls)):
if ls[m] == min(ls):
twodk[i][j] = twod[m]
#----------------------------
#color box:
#The image og color water
yellow = cv2.imread('33.jpeg',0)
red = cv2.imread('7.jpeg',0)
green = cv2.imread('5.jpeg',0)
blue = cv2.imread('6.jpeg',0)
pink = cv2.imread('4.jpeg',0)
perpul = cv2.imread('3.jpeg',0)
orange = cv2.imread('2.jpeg',0)
color_box = [yellow, red, green, blue, pink, perpul, orange]
#-----------------------------
yellowc = cv2.imread('33.jpeg')
redc = cv2.imread('7.jpeg')
greenc = cv2.imread('5.jpeg')
bluec = cv2.imread('6.jpeg')
pinkc = cv2.imread('4.jpeg')
perpulc = cv2.imread('3.jpeg')
orangec = cv2.imread('2.jpeg')
color_boxcc = [yellowc, redc, greenc, bluec, pinkc, perpulc, orangec]
intensity = []
for i in range(len(main_data)):
s = 0
m = len(color_box[i])
n = len(color_box[i][0])
for j in range(m):
for k in range(n):
s = s + color_box[i][j][k]
intensity.append(s/(m*n)) #color id
#---------------------------
#matching:
team0 = np.array(twod)
team0 = np.sort(team0) #main color sort
team = np.array(intensity)
team = np.sort(team) #color sort
#--------------------------
#normalization:
#image0
norim = []
for i in range(len(img0)):
norimx = []
for j in range(len(img0[0])):
a = img0[i][j] /255
norimx.append(a)
norim.append(norimx)#norm original gray image
#-------------------------
#norm water color
watercolornorm = []
for i in range(len(main_data)):
m = len(color_box[i])
n = len(color_box[i][0])
c = []
for j in range(m):
r = []
for k in range(n):
a = color_box[i][j][k]/255
r.append(a)
c.append(r)
watercolornorm.append(c)
#--------------------------
#
canva = []
forbiden = [[-1,-1]]
for i in range(len(main_data)):
loop = True
for j in range(len(norim)):
canvasr = []
for k in range(len(norim[0])):
d = False
for o in range(len(forbiden)):
if forbiden[o][0]==j and forbiden[o][1]==k:
d = True
break
if d == False:
if abs(twod[i]/255 - norim[j][k])<= 0.298:
if loop==True:
win = []
for l in range(len(intensity)):
a = abs(twod[i]-intensity[i])
win.append(a)
loop=False
print(i)
minimum = min(win)
for l in range(len(intensity)):
if win[l] == minimum:
candid = l
win2 = []
for m in range(len(watercolornorm[candid])):
for n in range(len(watercolornorm[candid][0])):
win2.append(abs(norim[j][k]-watercolornorm[candid][m][n]))
for m in range(len(win2)):
if min(win2) == win2[m]:
indexi = math.floor(m/len(watercolornorm[candid][0]))
indexj = m - (indexi*len(watercolornorm[candid][0]))
img[j][k][0]=color_boxcc[candid][indexi][indexj][0]
img[j][k][1]=color_boxcc[candid][indexi][indexj][1]
img[j][k][2]=color_boxcc[candid][indexi][indexj][2]
f = []
f.append(j)
f.append(k)
forbiden.append(f)
plt.imshow(img , interpolation='nearest')
plt.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment