La combinaison de Deux Images avec OpenCV
Je suis en train d'utiliser OpenCV 2.1 de combiner deux images en une seule, avec les deux images adjacents les uns aux autres. En Python, je suis en train de faire:
import numpy as np, cv
img1 = cv.LoadImage(fn1, 0)
img2 = cv.LoadImage(fn2, 0)
h1, w1 = img1.height,img1.width
h2, w2 = img2.height,img2.width
# Create an array big enough to hold both images next to each other.
vis = np.zeros((max(h1, h2), w1+w2), np.float32)
mat1 = cv.CreateMat(img1.height,img1.width, cv.CV_32FC1)
cv.Convert( img1, mat1 )
mat2 = cv.CreateMat(img2.height, img2.width, cv.CV_32FC1)
cv.Convert( img2, mat2 )
# Copy both images into the composite image.
vis[:h1, :w1] = mat1
vis[:h2, w1:w1+w2] = mat2
h,w = vis.shape
vis2 = cv.CreateMat(h, w, cv.CV_32FC3)
vis0 = cv.fromarray(vis)
cv.CvtColor(vis0, vis2, cv.CV_GRAY2BGR)
cv.ShowImage('test', vis2)
cv.WaitKey()
Les deux images d'entrée sont:
https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/box.png?rev=2270
https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/box_in_scene.png?rev=2270
L'image résultante est:
Il peut être difficile à distinguer du reste du site, mais la plupart de l'image est blanc, correspondant à l'endroit où les images doivent être. La zone noire où pas de données d'image a été écrit.
Pourquoi toutes mes données d'image à être convertis en blanc?
- Avez-vous vu find_obj.py exemple à partir de OpenCV 2.3.1? Il est exactement comme ce que vous essayez de faire.
- Oui, c'est effectivement ce que je suis en train de convertir OpenCV 2.1. Je n'ai pas de 2.3 et n'arrive pas à compiler, alors je travaille avec 2.1 pour l'instant.
- Vous pouvez également créer une question à propos de votre problème de compilation. Je pense que c'est résoluble. Et s'il vous plaît noter que flann partie de l'échantillon ne peut pas être mis en œuvre avec OpenCV 2.1 parce que les liaisons python pour flann indice ont été ajoutés uniquement en 2.3.1.
Vous devez vous connecter pour publier un commentaire.
Pour les cas où vos images se trouvent être de la même taille (ce qui est le cas pour l'affichage de l'image le traitement des résultats), vous pouvez utiliser numpy de concaténer pour simplifier votre code.
À pile à la verticale (img1 sur img2):
À empiler horizontalement (img1 à gauche de img2):
À vérifier:
ValueError: all the input array dimensions except for the concatenation axis must match exactly
Pour ceux qui cherchent à combiner 2 images en couleur en un seul,
c'est une légère mod sur Andrey réponse qui a fonctionné pour moi :
ou si vous préférez héritage façon: