Как создать полупрозрачную форму?

Я хотел бы знать, как рисовать полупрозрачные фигуры в 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 не имеет этой функциональности, встроенной в функции рисования. Как я могу рисовать фигуры в OpenCV, чтобы исходное изображение было частично видно через фигуру?

19

Решение

Изображение ниже иллюстрирует прозрачность с использованием 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);
}
32

Другие решения

В 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/

11

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector