以下是 OpenCV 的示例:
#include <cv.h>
#include <highgui.h>
int
main(int argc, char **argv)
{
cv::VideoCapture capture(argv[1]);
if (capture.grab())
{
cv::Mat_<char> frame;
capture.retrieve(frame);
//
// Convert to your byte array here
//
}
return 0;
}
它未经测试,但我从一些现有的工作代码中蚕食了它,所以你不应该花很长时间让它工作。
cv::Mat_<unsigned char>
本质上是一个字节数组。如果您确实需要明确类型的东西unsigned char *
,那么您可以 malloc 适当大小的空间并使用迭代矩阵
您可以cv::Mat
使用像素位置(cv::Mat_::at()
)或迭代器(cv::Mat_::begin()
和朋友)将 a 转换为字节数组。
库很少将图像数据公开为简单指针的原因有很多,例如:
- 这意味着整个图像必须在内存中占据一个连续的空间。这在处理大图像时很重要
- 它需要提交一定的数据顺序(像素与非平面——RGB 平面是散布存储还是分开存储?)并降低了灵活性
- 取消引用指针是导致错误(缓冲区溢出等)的原因。
所以如果你想要你的指针,你必须为它做一些工作。