gpt4 book ai didi

c++ - 如何绘制透明多边形?

转载 作者:行者123 更新时间:2023-11-28 00:09:41 26 4
gpt4 key购买 nike

我想绘制一个透明的多边形(在本例中为三角形)。但是我无法通过搜索网络找到任何示例。

// Create image
Mat image = Mat::zeros( 400, 400, CV_8UC3 );

// Draw a circle
/** Create some points */
Point Treangle_points[1][20];
Treangle_points[0][0] = Point( 150, 100 );
Treangle_points[0][1] = Point( 275, 350 );
Treangle_points[0][2] = Point( 50, 20 );

const Point* ppt[1] = { Treangle_points[0] };
int npt[] = { 3 };

fillPoly( image, ppt, npt, 1, Scalar( 255, 255, 255 ), 8 );
imshow("Image",image);

最佳答案

要使用透明度,您需要在 BGRA 颜色空间中使用 alpha channel 。 alpha = 0 表示完全透明,而 alpha = 255 表示不透明颜色。

您需要创建一个 CV_8UC4 图像(又名 Mat4b),或者使用 cvtColor(src, dst, COLOR_BGR2BGRA) 将 3 channel 图像转换为 4 channel ,并绘制一个透明的填充形状,alpha channel 等于 0。

如果加载 4 channel 图像,请记住使用 imread("path_to_image", IMREAD_UNCHANGED);

透明三角形(透明度在这里呈现为白色,您可以看到图像实际上是透明的,用您喜欢的图像查看器打开它):

enter image description here

代码:

#include <opencv2/opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;

int main()
{
// Create a BGRA green image
Mat4b image(300, 300, Vec4b(0,255,0,255));

vector<Point> vertices{Point(100, 100), Point(200, 200), Point(200, 100)};

vector<vector<Point>> pts{vertices};
fillPoly(image, pts, Scalar(0,0,0,0));
// ^ this is the alpha channel

imwrite("alpha.png", image);
return 0;
}

注意

imshow 不会正确显示透明度,因为它只是忽略了 alpha channel 。


C++98版本

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
// Create a BGRA green image
Mat4b image(300, 300, Vec4b(0, 255, 0, 255));

Point vertices[3];
vertices[0] = Point(100, 100);
vertices[1] = Point(200, 200);
vertices[2] = Point(200, 100);

const Point* ppt[1] = { &vertices[0] };
int npt[] = { 3 };

fillPoly(image, ppt, npt, 1, Scalar(0, 0, 0, 0), 8);

imwrite("alpha.png", image);

imshow("a", image);
waitKey();

return 0;
}

关于c++ - 如何绘制透明多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33792002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com