在OpenCV中绘制透明图像

在OpenCV中绘制透明图像,opencv,png,draw,transparent,Opencv,Png,Draw,Transparent,如果我用某种颜色在透明图像(4个通道)上画一条线或某个图形,在保存图像后,该线/图形是白色的,即使我用红色绘制,我创建了一个透明图像或从internet打开了一个。我错过了一些东西。有什么建议吗 原画 画两条红色线条后的图片 Mat图像; image=imread(“ball.png”,-1); if(image.channels()==4) { //向量ch; //分割(图像,ch); cv::line(图像,cv::Point(0,0),cv::Point(image.cols,imag

如果我用某种颜色在透明图像(4个通道)上画一条线或某个图形,在保存图像后,该线/图形是白色的,即使我用红色绘制,我创建了一个透明图像或从internet打开了一个。我错过了一些东西。有什么建议吗

原画

画两条红色线条后的图片

Mat图像;
image=imread(“ball.png”,-1);
if(image.channels()==4)
{
//向量ch;
//分割(图像,ch);
cv::line(图像,cv::Point(0,0),cv::Point(image.cols,image.rows),cv_RGB(255,0,0),7,cv_AA,0);
cv::line(image,cv::Point(0,image.rows),cv::Point(image.cols,0),cv_RGB(255,0,0),7,cv_AA,0);
imwrite(“out.png”,图像);
cv::namedWindow(“透明”,cv_窗口_自动大小| cv_窗口_自由比率);
cv::imshow(“透明”,图像);
等待键(0);
垫温(图像);
cv::行(温度,cv::点(0,0),cv::点(温度列,温度行),cv_RGB(255,0,0),7,cv_AA,0);
cv::行(温度,cv::点(0,温度行),cv::点(温度列,0),cv_RGB(255,0,0),7,cv_AA,0);
双不透明度=0.9;
cv::addWeighted(温度,不透明度,图像,1-不透明度,0,图像);
cv::namedWindow(“不透明度”,cv_窗口_自动调整大小);
cv::imshow(“不透明度”,图像);
imwrite(“opacity.png”,图像);
等待键(0);
字符串path=“myimage.png”;
Mat myImage(image.rows、image.cols、CV_8UC4);
myImage=cv::标量(255255,0);
cv::line(myImage,cv::Point(0,0),cv::Point(image.cols,image.rows),cv_RGB(255,0,0),7,cv_AA,0);
cv::line(myImage,cv::Point(0,image.rows),cv::Point(image.cols,0),cv_RGB(255,0,0),7,cv_AA,0);
imwrite(路径,myImage);

我尝试了这三种方法,结果都是一样的。

我认为宏
CV\u RGB
创建了一个
CV::Scalar
,其中包含
(b,g,r,0)

此代码适用于我:

    cv::line(image,cv::Point(0,0),cv::Point(image.cols,image.rows),cv::Scalar(0,0,255,255),7,CV_AA,0);
    cv::line(image,cv::Point(0,image.rows),cv::Point(image.cols,0),cv::Scalar(0,0,255,255),7,CV_AA,0);
因此:


我认为宏
CV\u RGB
创建了一个
CV::Scalar
,其中包含
(b,g,r,0)

此代码适用于我:

    cv::line(image,cv::Point(0,0),cv::Point(image.cols,image.rows),cv::Scalar(0,0,255,255),7,CV_AA,0);
    cv::line(image,cv::Point(0,image.rows),cv::Point(image.cols,0),cv::Scalar(0,0,255,255),7,CV_AA,0);
因此:


您需要显示一些代码…CV_RGB(255,0,0)是否创建RGBA颜色?我不确定openCV在读取/写入图像时是否正确处理透明度。是的!在保存图片之前,我使用imshow函数显示图片,图像的线条为红色,但在保存并打开后,线条为白色。openCV使用第二个参数-1调用imread处理透明度ok(CV_加载_图像_未更改)。检查此链接我认为
imshow
无法正确处理alpha通道,并且CV_RGB()宏为RGB值后的每个条目创建一个标量,每个条目有0个条目。我马上给你一个答案。imshow不处理alpha通道,这是正确的。这就是为什么我调用它时,透明图像不是透明的,它有黑色背景,但这并不困扰我,因为我希望保存的图片是透明的,带有黑色背景x,而不是显示的那个。你需要显示一些代码…CV_RGB(255,0,0)创建RGBA颜色?我不确定openCV在读取/写入图像时是否正确处理透明度。是的!在保存图片之前,我使用imshow函数显示图片,图像的线条为红色,但在保存并打开后,线条为白色。openCV使用第二个参数-1调用imread处理透明度ok(CV_加载_图像_未更改)。检查此链接我认为
imshow
无法正确处理alpha通道,并且CV_RGB()宏为RGB值后的每个条目创建一个标量,每个条目有0个条目。我马上给你一个答案。imshow不处理alpha通道,这是正确的。这就是为什么我调用它时,透明图像不是透明的,它有黑色背景,但这并不困扰我,因为我希望保存的图片是透明的,带有黑色背景x,而不是显示的那个。愚蠢的我,我必须意识到这就是问题所在。谢谢善良的先生!愚蠢的我,我必须意识到这就是问题所在。谢谢善良的先生!