2017-05-03 2 views
2

Je suis nouveau sur opencv. J'ai plusieurs images. Une des images de l'échantillon comme indiqué ci-dessous dans le coin supérieur gauche. Fondamentalement, je veux séparer l'arrière-plan et le premier plan de sorte que les bords sont clairs et je peux détecter les contours correctement.OpenCV python Filtre Stamp photoshop

J'ai essayé de nombreux seuils de filtre et bien sûr en utilisant divers paramètres.

enter image description here

Enfin quand je regardais sur la galerie de filtres photoshop je remarquai un filtre appelé Stamp qui me donne résultat souhaité (coin en haut à droite). Il rend les bords clairs et j'imagine utiliser une certaine quantité de flou dans les coins mous.

Je ne suis pas sûr comment je peux obtenir la même opération que le filtre de tampon de Photoshop utilisant python CV2?

Toute aide ou suggestion vous sera reconnaissante.

image originale Untouched

enter image description here

Tentative 1: - Code

import cv2 
import numpy as np 
from matplotlib import pyplot as plt 

input_img = cv2.imread('images/Tas/t3.bmp') 
desired_img = cv2.imread('images/stamp.jpg') 

# gray scale 
gray = cv2.cvtColor(input_img, cv2.COLOR_BGR2GRAY) 

kernel = np.ones((3,3),np.uint8) 

thresh1 = cv2.threshold(input_img,80,255,cv2.THRESH_BINARY)[1] 
erosion1 = cv2.erode(thresh1,kernel,iterations = 1) 
dilation1 = cv2.dilate(erosion1,kernel,iterations = 1) 

thresh2 = cv2.threshold(input_img,120,255,cv2.THRESH_BINARY)[1] 
erosion2 = cv2.erode(thresh2,kernel,iterations = 1) 
dilation2 = cv2.dilate(erosion2,kernel,iterations = 1) 

titles = ['Original', 'Desired','thresh1', 'erosion1','dilation1','thresh2','erosion2','dilation2'] 
images = [input_img, desired_img, thresh1, erosion1,dilation1, thresh2,erosion2, dilation2] 
for i in xrange(8): 
    plt.subplot(2,4,i+1),plt.imshow(images[i]) 
    plt.title(titles[i]) 
    plt.xticks([]),plt.yticks([]) 

plt.show() 

Sortie:

enter image description here

+0

Cela ressemble à une binarisation, et probablement une érosion et une dilatation. Afficher l'image originale intacte aussi –

+0

Hi @AnderBiguri Juste ajouté l'image originale. – VK321

+0

@AnderBiguri .. de l'aide? – VK321

Répondre

0

Il pourrait aider à vous ajouter quelques curseurs pour Gaussian Blur et le filtrage de seuil et vous pouvez obtenir des résultats assez décent:

fake "photoshop stamp" filter with gaussian blur + threshold

et voici l'extrait de base que je l'habitude de générer:

import numpy as np 
import cv2 
import cv2.cv as cv 
from matplotlib import pyplot as plt 

# slider callbacks 
def printThreshold(x): 
    print "threshold",x 
def printGaussianBlur(x): 
    print "gaussian blur kernel size",x 
# make a window to add sliders/preview to 
cv2.namedWindow('processed') 
#make some sliders 
cv2.createTrackbar('threshold','processed',60,255,printThreshold) 
cv2.createTrackbar('gaussian blur','processed',3,10,printGaussianBlur) 
# load image 
img = cv2.imread('cQMgT.png',0) 
# continously process for quick feedback 
while 1: 
    # exit on ESC key 
    k = cv2.waitKey(1) & 0xFF 
    if k == 27: 
     break 

    # Gaussian Blur (x2 +1 = odd number for kernel size) 
    kernelSize = ((cv2.getTrackbarPos('gaussian blur','processed') * 2) + 1) 
    blur = cv2.GaussianBlur(img,(kernelSize,kernelSize),0) 
    # Threshold 
    ret,thresh = cv2.threshold(blur,cv2.getTrackbarPos('threshold','processed',),255,0) 
    # show result 
    cv2.imshow('processed ',thresh) 

# exit 
cv2.destroyAllWindows() 

N'hésitez pas à ajouter d'autres filtres au mélange et expérimenter avec des curseurs.

+0

oh @GeorgeProfenza vous commencez mate. Merci beaucoup d'avoir pris le temps de le faire. Slider était vraiment cool idée que je ne pensais pas. L'idée principale est de garder la séparation de l'os supérieur et inférieur. Je suis sûr que je vais essayer quelques expériences sur votre code et vous le ferai savoir au cas où j'obtiendrais un résultat. – VK321

+0

Doux! Si la réponse était utile, n'hésitez pas à voter/marquer comme bon vous semble;) Amusez-vous à explorer les filtres.Dans l'attente de voir ce qui a fonctionné (peut-être à travers [filtres morphologiques] (http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html) dans le mélange (vous avez déjà érodé)/dilater, peut-être ouvrir/fermer pourrait aider aussi) –