Created
September 19, 2022 16:57
-
-
Save ahmadali-jamali/d1e690cc4176abc8fcdacbd9ce978f02 to your computer and use it in GitHub Desktop.
Image convert to water color paint by python code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#--------------------------- | |
#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