我是 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 并正确获取图像的方法是什么?
感谢任何帮助。
-谢谢
预期输出
实际输出
最佳答案
如果您只加载图像,我建议您使用imread相反,您还需要指定 imread
的第二个参数来加载 Alpha channel ,即 CV_LOAD_IMAGE_UNCHANGED
或 cv::IMREAD_UNCHANGED
,具体取决于版本(在最坏的情况下 -1 也可以)。
据我所知,VideoCapture
类不会使用第四个 channel 加载图像/视频。由于您使用的是网页网址,因此无法使用 imread
加载图像,但您可以使用任何方法下载数据(例如curl),然后使用 imdecode与数据缓冲区一起获取cv::Mat
。 OpenCV 是一个用于图像处理的库,而不是用于下载图像的库。
关于c++ - OpenCV:带有 Alpha channel 的 PNG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36451089/