c++ - OpenCV:带有 Alpha channel 的 PNG 图像

标签 c++ opencv png

我是 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();
}

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

感谢任何帮助。
-谢谢

预期输出

Expected output

实际输出

Actual output

最佳答案

如果您只加载图像,我建议您使用imread相反,您还需要指定 imread 的第二个参数来加载 Alpha channel ,即 CV_LOAD_IMAGE_UNCHANGEDcv::IMREAD_UNCHANGED ,具体取决于版本(在最坏的情况下 -1 也可以)。

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

关于c++ - OpenCV:带有 Alpha channel 的 PNG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36451089/

相关文章:

python - 从 Qt 小部件应用程序调用 pyqt 小部件

python - 使用 Python、OpenCV 和 numpy 数组创建灰度视频

c++ - 使用小数组制作长 vector (列矩阵)

PHP/GD ImageSaveAlpha 和 ImageAlphaBlending

C++ 异常访问冲突

c++ - 如何为模板类指定 "all parameterized types"或 "all argument lists"?

c++ - OpenCV 程序运行时错误

PNG 文件结构

c++ - 读取PNG header 的宽度和高度

c++ - 日志记录和多线程