在OpenCV中绘制透明图像

Zac*_*ada 1 png opencv transparent draw

如果我在具有特定颜色的透明图像(4个通道)上绘制一条线或某个图形,在我保存图像后,线条/图形为白色,即使我用红色绘制并且我创建透明图像或者我从互联网上打开一个.我错过了什么.有什么建议?

原始图片 http://i.imgur.com/Bfy5tNq.png?1

用红色绘制2条线后的图片 http://i.imgur.com/Pl7BHPT.png?1

    Mat image;
    image = imread("ball.png", -1);

    if(image.channels() == 4)
    {
        //vector<Mat> ch;
        //split(image, ch);

        cv::line(image,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", image); 

        cv::namedWindow("Transparent", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
        cv::imshow("Transparent",image);
        waitKey(0);

        Mat temp(image);
         cv::line(temp,cv::Point(0,0),cv::Point(temp.cols,temp.rows),CV_RGB(255,0,0),7,CV_AA,0);
        cv::line(temp,cv::Point(0,temp.rows),cv::Point(temp.cols,0),CV_RGB(255,0,0),7,CV_AA,0);
        double opacity = 0.9;
        cv::addWeighted(temp,opacity,image,1 - opacity,0,image);
        cv::namedWindow("opacity",CV_WINDOW_AUTOSIZE);
        cv::imshow("opacity",image);
        imwrite("opacity.png",image);
        waitKey(0);



        string path="myimage.png";
        Mat myImage(image.rows,image.cols,CV_8UC4);
        myImage=cv::Scalar(255,255,255,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(path,myImage);
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有这三种方法,所有这些都导致了相同的图片.

Mic*_*cka 6

我认为宏CV_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);
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述