bounty将在3小时后过期。回答此问题可获得+50信誉奖励。Kartik Aiyer正在寻找来自信誉良好的来源的答案:我正在寻找一个专门提供将Android AImage Package 到cv::Mat中的最有效方法的答案
我正在编写一个基于NDK的应用程序,并将YUV图像数据输入到一个表面,该表面以AImage* 结构传递到我的代码中。如果图像来自相机,它可以是半-NV 21中的平面形成Y的一个平面,然后是宽度相同但高度一半的VU的一个平面。如果图像来自解码器,那么我得到平面YUV 420,因此具有U和V的3个平面1/4的像素数。
我想使用一个接受外部数据指针的构造函数将其 Package 在cv::Mat中。我知道如何检测是否得到半平面或平面的YUV。问题是我不确定来自NDK的所有平面是否是一个连续的块。此外,平面的尺寸不一样,因为UV平面中的像素较少。我如何 Package AImage。以前有人做过类似的事情吗?我必须在cv::Mat中的单个平面中复制数据吗?
1条答案
按热度按时间yftpprvb1#
若要将
AImage*
Package 在cv::Mat
中,您必须确定数据是连续的,而且是cv::Mat
可以识别的格式。如果数据不是连续的,或是采用不同的格式,您可能需要复制或转换数据。以下是C++中的一个粗略示例:
字符串
这是一个简化的示例,不处理格式转换或数据复制。您需要根据具体需要添加这些内容。
"你可能想:“”
1.了解如何将
NV21
转换为RGB
或将grayscale
转换为C++
1.检查数据是否连续,如果不连续,如何将其复制到连续块中
1.使用您的数据测试创建
cv::Mat
,并查看它是否按预期工作。