首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IplImage上的半透明对象

IplImage上的半透明对象
EN

Stack Overflow用户
提问于 2019-05-20 11:36:21
回答 1查看 207关注 0票数 1

我在IplImage上绘制对象,如下所示:

代码语言:javascript
运行
复制
cvLine(image, point_1, point_2, color, thickness, CV_AA); // Line
cvCircle(mage, point, radius, color, thickness, CV_AA); // Circle
// and some others...

如果我没理解错的话,cv::Scalar不支持alpha通道,怎么把它们画成半透明的?我发现了一个类似但不太合适的东西:link。这里我们讨论的是半透明IplImage,而不是它上面的对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-20 14:34:08

所以,我现在用IplImagecv::Mat对它进行了测试,cvCirclecv::circle都不支持绘制半透明对象。我使用的是OpenCV 3.4.0,因为这个版本仍然支持旧的C应用编程接口。

让我们来看看下面的代码:

代码语言:javascript
运行
复制
// IplImage - doesn't work
IplImage* ipl = cvCreateImage(cvSize(201, 201), IPL_DEPTH_8U, 4);
cvSet(ipl, CvScalar(255, 0, 0, 255));
cvCircle(ipl, CvPoint(100, 100), 50, CvScalar(0, 0, 255, 128), CV_FILLED);

// cv::Mat - doesn't work
cv::Mat img = cv::Mat(201, 201, CV_8UC4, cv::Scalar(255, 0, 0, 255));
cv::circle(img, cv::Point(100, 100), 50, cv::Scalar(0, 0, 255, 128), cv::FILLED);

我们创建一个透明度为零的蓝色4通道图像,并绘制一个透明度为0.5的红色圆圈。在这两种情况下,我们都会得到以下输出:

我们看到,红色圆圈的一部分实际上“替换”了原始蓝色图像中的像素值。

因此,对于IplImagecv::Mat,我们都需要使用混合,例如使用addWeighted。让我们来看看这段代码:

代码语言:javascript
运行
复制
// IplImage - works
IplImage* iplBG = cvCreateImage(cvSize(201, 201), IPL_DEPTH_8U, 3);
cvSet(iplBG, CvScalar(255, 0, 0));
IplImage* iplFG = cvCreateImage(cvSize(201, 201), IPL_DEPTH_8U, 3);
cvSet(iplFG, CvScalar(0, 0, 0));
cvCircle(iplFG, CvPoint(100, 100), 50, CvScalar(0, 0, 255), CV_FILLED);
IplImage* iplOut = cvCreateImage(cvSize(201, 201), IPL_DEPTH_8U, 3);
cvAddWeighted(iplBG, 1, iplFG, 0.5, 0, iplOut);

// cv::Mat - works
cv::Mat imgBG = cv::Mat(201, 201, CV_8UC3, cv::Scalar(255, 0, 0));
cv::Mat imgFG = cv::Mat(201, 201, CV_8UC3, cv::Scalar(0, 0, 0));
cv::circle(imgFG, cv::Point(100, 100), 50, cv::Scalar(0, 0, 255), cv::FILLED);
cv::Mat imgOut;
cv::addWeighted(imgBG, 1, imgFG, 0.5, 0, imgOut);

实际上,我们创建了一个蓝色的3通道背景图像,如下所示:

并且,我们创建一个与红色圆圈大小相同的黑色前景3通道图像:

addWeightedalpha = 1beta = 0.5一起使用,我们将获得两个版本的预期输出:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56214017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档