【发布时间】:2022-07-10 23:21:38
【问题描述】:
你好,
我正在用 C++ 为 Adobe After Effects 编写一个效果插件,我需要使用内存中已经存在的像素数据创建一个
cv::Mat
。但是,当我使用以下方法对其进行初始化时:
cv::Mat in_frame_mat(height, width, CV_8UC4, input->data);
(输入->数据是指向第一个字节的指针),输出全是蓝色。
我认为这是因为 AE 存储像素数据 RGBA 或 ARGB,而 OpenCV 假定为 BGRA 或 ABGR(不确定是哪个)。
我知道我可以遍历每个像素并在内存中创建一个新空间来存储图像的 BGRA 表示,然后使用
that
初始化
cv::Mat
,但这确实是性能受限而且我不想增加不必要的计算时间。
有没有办法使用存储 RGBA 的现有像素数据创建
cv::Mat
?
谢谢!
-
好吧,
cvtColor
-- 你的处理可能不在乎, 你 在你用imshow
/imread
看图片时在乎。做你的事并保持频道秩序。在 AE 中它不会是蓝色的。 -
@ChristophRackwitz 我想到了这一点,但是我想在垫子上进行的处理需要它具有正确的色彩空间。我最终编写了自己的函数来转换色彩空间。