windows8.1 python3.4.4 opencv3.1.0
Chargez une image couleur et créez une illusion d'aquarelle.
L'illusion de l'aquarelle est de ne mettre de la couleur que sur le contour des peintures et des photographies. Un phénomène dans lequel les zones qui ne sont pas réellement colorées semblent être légèrement colorées ... Et, parler de vision sera long, alors voici quelques liens. Des exemples d'illusions d'aquarelle sont également affichés.
L'illusion de lumière, d'obscurité et de couleur causée par les bords - Page d'accueil d'Hitoyuki Arai Illusion Forum CVRM
L'image utilisée cette fois-ci provient du célèbre "Irasutoya"
"Produits spécialisés"
Narutake j'ai cherché diverses images avec mon sang
edge.py
import numpy as np
import cv2
"""
Environnement: python3.4.4 openCV
Image originale: image_name
Image à sauvegarder: out_name
image_Convertir le nom en illusion d'aquarelle et en sortie
"""
image_name = 'test1.png'
out_name = 'out1.png'
#Chargement des images
Img0 = cv2.imread(image_name)
#L'image est inversée en noir et blanc pour plus de commodité avec le masque ultérieur
negImg = 255 - Img0
#Obtenez la taille de l'image et spécifiez l'épaisseur du contour
ImgHeight, ImgWidth = Img0.shape[:2]
#Le plus long/200 + 1
if ImgWidth > ImgHeight:
lineWeight = ImgHeight // 200 + 1
else:
lineWeight = ImgWidth // 200 + 1
#Obtenez l'avantage(Seuil en deux étapes 100200)
#Comme nous allons faire correspondre deux contours avec des épaisseurs différentes plus tard, préparez deux images
edgeImg1 = cv2.Canny(Img0,100,200,4)
edgeImg2 = cv2.Canny(Img0,100,200,4)
#Objets sur fond noir(blanc)Détecter le contour de
image1, contours, hierarchy = cv2.findContours(edgeImg1,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
image2, contours, hierarchy = cv2.findContours(edgeImg2,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#Contour noir
edge = cv2.drawContours(image1, contours, -1, (255,255,255), 1)
#Couleur autour du contour noir(Élément aquarelle)
mask1 = cv2.drawContours(image2, contours, -1, (255,255,255), lineWeight)
#Le bord étant blanc sur fond noir, il est affiché en sens inverse
negEdge = 255- edge
#Couper l'image inversée avec un masque
negColor = cv2.bitwise_and(negImg, negImg, mask=mask1)
#Inverser à nouveau l'image inversée recadrée
Color = 255-negColor
#Image à sortir
output = cv2.bitwise_and(Color, Color, mask=negEdge)
cv2.imshow('image', output)
#Appuyez sur la touche esc pour terminer
#Appuyez sur s pour enregistrer
k = cv2.waitKey(0) & 0xFF
if k == 27:
cv2.destroyAllWindows()
elif k == ord('s'):
cv2.imwrite('out01.png',output)
#python edge.Courir avec py
Que diriez-vous. At-il l'air coloré?
La détection des bords est facile car elle fournit une fonction.
Cependant, comme la détection des contours par Canny () est basée sur seulement deux seuils, il n'est pas possible de faire un jugement de limite délicat comme l'œil humain. C'est pourquoi les feuilles de carottes ont disparu, et le riz est devenu un et ressemble à des haricots écrasés que vous ne comprenez pas.
Autre chose, répéter les inversions n'est pas très intelligent. Cependant, lorsque j'essayais de laisser les bords noirs ou de blanchir les non-bords, le résultat était comme ça. Ce serait un peu plus facile si le fond pouvait être blanchi ...
Irasutoya OpenCV-Python Tutorials 1 documentation Le processus d'apprentissage de Python Pinna, B., Brelstaff, G., and Spillmann, L. (2001) Surface color from boundaries: a new ‘watercolor’ illusion. Vision Research, 41, 2669-2676.
Recommended Posts