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)
我已经尝试了所有这三种方法,所有这些都导致了相同的图片.
我认为宏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)
结果如下:

| 归档时间: |
|
| 查看次数: |
3641 次 |
| 最近记录: |