Solución:
Si bien la respuesta de @perrejba es correcta, usa las funciones de estilo C heredadas. Como la pregunta está etiquetada como C ++, es posible que desee utilizar un método en su lugar:
inputMat.copyTo(outputMat, maskMat);
Todos los objetos son de tipo cv::Mat
.
Tenga en cuenta que el enmascaramiento es binario. Cualquier valor distinto de cero en la máscara se interpreta como “copiar”. Incluso si la máscara es una imagen en escala de grises.
También tenga en cuenta que la función .copyTo () no borra la salida antes de copiar.
Si desea alterar permanentemente la imagen original, debe realizar una copia / clonación / asignación adicional. La función copyTo () no está definida para superponer imágenes de entrada / salida. Por lo tanto, no puede usar la misma imagen como entrada y salida.
No aplica una máscara binaria a una imagen. Usted (opcionalmente) usa una máscara binaria en una llamada de función de procesamiento para decirle a la función qué píxeles de la imagen desea procesar. Si malinterpreto completamente su pregunta, debe agregar más detalles para aclarar.
Puede usar la máscara para copiar solo la región de interés de una imagen original en una de destino:
cvCopy(origImage,destImage,mask);
dónde mask
debe ser una matriz de un solo canal de 8 bits.
Ver más en los documentos de OpenCV