c++ - español - ¿Cómo crear una forma semi transparente?
qgis español (2)
Me gustaría saber cómo dibujar formas semitransparentes en OpenCV, similares a las de la imagen a continuación (de http://tellthattomycamera.wordpress.com/ )
No necesito esos círculos elegantes, pero me gustaría poder dibujar un rectángulo, por ejemplo, en una imagen de color de 3 canales y especificar la transparencia del rectángulo, algo así como
rectangle (img, Point (100,100), Point (300,300), Scalar (0,125,125,0.4), CV_FILLED);
donde 0,125,125
es el color del rectángulo y 0.4
especifica la transparencia. Sin embargo, OpenCV no tiene esta funcionalidad incorporada en sus funciones de dibujo. ¿Cómo puedo dibujar formas en OpenCV para que la imagen original que se está dibujando sea parcialmente visible a través de la forma?
En OpenCV 3 este código me funcionó:
cv::Mat source = cv::imread("IMG_2083s.png");
cv::Mat overlay;
double alpha = 0.3;
// copy the source image to an overlay
source.copyTo(overlay);
// draw a filled, yellow rectangle on the overlay copy
cv::rectangle(overlay, cv::Rect(100, 100, 300, 300), cv::Scalar(0, 125, 125), -1);
// blend the overlay with the source image
cv::addWeighted(overlay, alpha, source, 1 - alpha, 0, source);
Fuente / Inspirado por: http://bistr-o-mathik.org/2012/06/13/simple-transparency-in-opencv/
La imagen de abajo ilustra la transparencia usando OpenCV. Necesitas hacer una mezcla alfa entre la imagen y el rectángulo. A continuación se muestra el código para una forma de hacer esto.
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int main( int argc, char** argv )
{
cv::Mat image = cv::imread("IMG_2083s.png");
cv::Mat roi = image(cv::Rect(100, 100, 300, 300));
cv::Mat color(roi.size(), CV_8UC3, cv::Scalar(0, 125, 125));
double alpha = 0.3;
cv::addWeighted(color, alpha, roi, 1.0 - alpha , 0.0, roi);
cv::imshow("image",image);
cv::waitKey(0);
}