python - importar - opencv mac
OpenCV: ¿Invertir una máscara? (4)
Creo que algo como esto podría manejar el caso donde la máscara de entrada puede tener varios valores distintos de cero:
cv::Mat1b inputMask = ....;
cv::Mat1b invertedMask(inputMask.rows, inputMask.cols);
std::transform(
inputMask.begin(), inputMask.end(), invertedMask.begin(),
std::logical_not<uint8_t>()
);
¿Hay una manera simple de invertir una máscara usando OpenCV? Por ejemplo, si tengo una máscara como esta:
010
111
010
Me gustaría invertirlo y obtener esto:
101
000
101
Nota: Estoy usando los enlaces de Python de OpenCV, así que si bien sería posible hacer un bucle sobre cada elemento de la máscara, la velocidad de ejecución podría convertirse en un problema.
Para una máscara de 8 bits que usa 255 como valor "on":
mask = cv::Mat::ones(mask.size(), mask.type()) * 255 - mask;
Estoy usando esta en lugar de la solución Matt M ya que todavía estoy usando OpenCV 2.1.0 para uno de mis proyectos.
Si tiene una máscara de 8 bits, entonces debe hacer mask = 255 - mask
. cv :: El operador de resta Mat está sobrecargado para hacer una resta escalar por elemento.
cv2.bitwise_not(mask)
ayudaría aquí