2012-06-12 33 views
25

¿Hay una función OpenCV para dibujar una imagen sobre otra imagen? Tengo una imagen grande del tipo Mat. Y tengo una pequeña imagen del tipo Mat (5x7). Quiero dibujar esta imagen pequeña sobre la imagen grande en el coordinates especificado.OpenCV dibujar una imagen sobre otra imagen

+11

favor aceptar algunas de responde o dice por qué no funcionan. Trata de no mantener este lugar abierto preguntas cementerio. –

Respuesta

39

Uso Mat::rowRange() y Mat::colRange() para especificar el área a la que desea llamar en el destino Mat. Código:

Mat src(5, 7, CV_8UC1, Scalar(1)); // 5x7 
Mat dst(10, 10, CV_8UC1, Scalar(0)); // 10x10 

src.copyTo(dst.rowRange(1, 6).colRange(3, 10)); 

resultados en las siguientes:

antes copyTo():

dst: 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 

después copyTo():

dst: 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 1 1 1 1 1 1 1) 
    (0 0 0 1 1 1 1 1 1 1) 
    (0 0 0 1 1 1 1 1 1 1) 
    (0 0 0 1 1 1 1 1 1 1) 
    (0 0 0 1 1 1 1 1 1 1) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
    (0 0 0 0 0 0 0 0 0 0) 
+2

'a.copyTo (big.colRange (51,55) .rowRange. (63,69))' for '5x7' –

+0

¡Muchas gracias! – vitaly

+1

Perfect One liner !! – user2727765

35

Crear una región de interés dentro de la imagen grande y luego copiar la imagen pequeña en esa región:

cv::Rect roi(cv::Point(originX, originY), cv::Size(width, height)); 
cv::Mat destinationROI = bigImage(roi); 
smallImage.copyTo(destinationROI); 

Si está seguro de la imagen pequeña se ajusta a la imagen grande, entonces usted puede simplemente hacer:

cv::Rect roi(cv::Point(originX, originY), smallImage.size()); 
smallImage.copyTo(bigImage(roi)); 
+1

Esto desafortunadamente no parece funcionar para mí, me sale el error: 'error: no hay función de coincidencia para llamar a 'cv :: Mat :: copyTo (cv :: Mat)'. Y ofrece a los candidatos que reciben cv :: OutputArray en su lugar, cuando veo http://opencv.willowgarage.com/documentation/cpp/basic_structures.html#cv-mat-copyto parece tomar Mat como argumento, sin embargo, obtener este error? – pbond

2

Aquí está la solución en la versión Java de OPENCV

Rect roi= new Rect(originX,originY,smalImage.width(),smallImge.height()); 
smallImage.copyTo(new Mat(input,roi)); 
Cuestiones relacionadas