Как создать полупрозрачную фигуру?
Я хотел бы знать, как рисовать полупрозрачные фигуры в OpenCV, похожие на те, что на изображении ниже (из http://tellthattomycamera.wordpress.com/)
Мне не нужны эти причудливые круги, но я хотел бы иметь возможность нарисовать прямоугольник, например, на 3-канальном цветном изображении и указать прозрачность прямоугольника, что-то вроде
rectangle (img, Point (100,100), Point (300,300), Scalar (0,125,125,0.4), CV_FILLED);
Где 0,125,125
- Цвет прямоугольника, а 0.4
- прозрачность.
Однако рад не имейте эту функциональность, встроенную в его функции рисования. Как я могу рисовать фигуры в OpenCV так, чтобы исходное изображение, на котором они нарисованы, было частично видно через форму?
2 ответа:
Изображение ниже иллюстрирует прозрачность с помощью OpenCV. Вам нужно сделать Альфа-смешение между изображением и прямоугольником. Ниже приведен код для одного из способов сделать это.
#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); }
В OpenCV 3 этот код работал для меня:
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);
Источник / вдохновение: http://bistr-o-mathik.org/2012/06/13/simple-transparency-in-opencv/