OpenCV:带有 Alpha 通道的 PNG 图像

2 c++ png opencv

我是 OpenCV 的新手,我已经完成了一个小型 POC,用于从某个 URL 读取图像。
我正在使用视频捕获从 URL 读取图像。代码如下:

VideoCapture vc;
vc.open("http://files.kurento.org/img/mario-wings.png");
if(vc.isOpened() && vc.grab()) 
{
       cv::Mat logo;
       vc.retrieve(logo);
       cv::namedWindow("t");
       imwrite( "mario-wings-opened.png", logo);
       cv::imshow("t", logo);
       cv::waitKey(0);
       vc.release();
}
Run Code Online (Sandbox Code Playgroud)

该图像未正确打开,可能是由于 Alpha 通道所致。保留 alpha 通道并正确获取图像的方法是什么?

任何帮助表示赞赏。
-谢谢

预期产出

预期产出

实际产量

实际产量

api*_*i55 5

如果您只加载图像,我建议您使用imread代替,此外,您还需要指定第二个参数imread来加载 alpha 通道,即CV_LOAD_IMAGE_UNCHANGEDcv::IMREAD_UNCHANGED,具体取决于版本(在最坏的情况下为 -1也有效)。

据我所知,该类VideoCapture不加载第四个通道的图像/视频。由于您使用的是 Web url,因此加载图像无法使用imread,但您可以使用任何方法下载数据(例如curl),然后使用imdecode与数据缓冲区来获取cv::Mat. OpenCV 是一个用于图像处理的库,而不是用于下载图像的库。

  • 新名称是 IMREAD_UNCHANGED (2认同)