0

Ich habe ein Schwarz-Weiß-Bild und das gleiche Bild mit Farbstrichen. Was ich tun möchte, ist die Farbstriche zu extrahieren, sie zu verwischen und dann das Original mit dem verschwommenen Bild zu vermischen. Ich extrahiere die Farbstriche, indem ich zwei Bilder voneinander subtrahiere, aber ich bekomme diese Farbstriche auf einem schwarzen Hintergrund, während ich sie auf Weiß brauche, um sie mit dem Original zu verschmelzen. Dies ist Teil meines Code:Extrahieren Farben Bild in Python

def imageblur(cimg): 
    return cv2.blur(cimg, (50, 50)) 


bw = glob('path1') 
colorful = glob('path2') 
output_dir = 'path3' 
index = 0 


for i,j in zip(bw, colorful): 
    img1 = cv2.imread(i) 
    img2 = cv2.imread(j) 
    color = cv2.subtract(img1,img2) 
    color = imageblur(color) 
    mask = Image.fromarray(np.uint8(color)) 
    img = Image.fromarray(np.uint8(img1)) 
    im = Image.blend(img, mask, 0.5) 
    #color = img1 + color 
    im.save(os.path.join(output_dir, str(index) + '.jpg')) 
    index += 1 
    print(index) 

Probe images

+0

was hast du erwartet passieren? 255 (weiß) - 255 (weiß) = 0 (schwarz). irgendwelche eigenen Ideen oder möchten Sie nur eine Lösung mit dem Löffel bekommen? – Piglet

Antwort

1

Wenn Sie wollen aus schwarzem den Hintergrund ändern zu weiß für RGB-Bilder, können Sie etwas tun können:

#thresholds all black color in your "color-on-black-background" image 
#to maximum value (255,255,255) (white) and sets the rest (yours colors) 
#to (0,0,0) (black) 
thresholded=cv2.inRange(img,(0,0,0),(0,0,0)) 
#add both images 
res=img+cv2.cvtColor(thresholded,cv2.COLOR_GRAY2BGR) 

Eingang (img): enter image description here

schwellenwert (schwellen): enter image description here

Ausgabe (Res): enter image description here

1

Verwendet das Beispielbild, um das Ergebnis zu erhalten. Die Verarbeitung wird geringfügig geändert.

import numpy as np 
import cv2 
import matplotlib.pyplot as plt 
%matplotlib inline 

def show(title, img, color=True): 
    if color: 
     plt.imshow(img[:,:,::-1]), plt.title(title), plt.show() 
    else: 
     plt.imshow(img, cmap='gray'), plt.title(title), plt.show() 

img = cv2.imread('color_strokes.jpg') 
show('original', img) 

mask=cv2.inRange(img,(0,0,0),(150,150,150)) 
show('mask', mask, False) 

res=255-cv2.cvtColor(mask,cv2.COLOR_GRAY2BGR) 
show('result', res, False) 

Ausgang:

color_strokes_output

Verwandte Themen