cv::使用cv::imdecode后不修改外部数据
cv::Mat external data not being modified after using cv::imdecode
edit:在试图给出一个直接的问题示例时,似乎我遗漏了导致真正问题的原因。我已经修改了这个例子来说明这个问题。
我正在尝试使用opencv对由外部数据组成的cv::Mat
执行操作。
考虑这个例子:
unsigned char *extern_data = new unsigned char[1280*720*3];
cv::Mat mat = cv::Mat(1280, 720, CV_8UC3, extern_data); //Create cv::Mat external
//Edit - Added cv::imdecode
mat = cv::imdecode(mat,1);
//In real implementation it would be mat = cv::imdecode(image,'1')
// where image is a cv::Mat of an image stored in a mmap buffer
mat.data[100] = 99;
std::cout << "External array: " << static_cast<int>(extern_data[100]) << std::endl;
std::cout << "cv::Mat array: " << static_cast<int>(mat.data[100]) << std::endl;
结果是:
> External array: 0
> cv::Mat array: 100
很明显,这个外部数组没有被修改,因此新的内存被分配给cv::Mat
数组。根据我的理解,这是不应该发生的!这应该不会导致复制操作,mat.data应该是指向extern_data[0]
的指针。
我误解了什么?
到目前为止,我让我的程序工作的方式是使用std::copy。我仍然想知道是否有一种方法将cv::imdecode()的结果直接分配给外部数据。
当前我正在使用
unsigned char *extern_data = new unsigned char[1280*720*3];
cv::Mat mat = cv::Mat(1280, 720, CV_8UC3, extern_data); //Create cv::Mat external
mat = cv::imdecode(mat,1);
std::copy(mat.data, mat.data + 1280*720*3, extern_data);
我只是希望我能弄清楚如何将cv::imdecode()
的结果直接分配给extern_data
,而无需额外的std::copy
行!
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 在函数内部的声明中初始化数组,并在外部使用它
- 概念中的cv限定符需要表达式参数列表
- 使外部项目可用于find_package CMake
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- C++:来自外部文件的Trivia
- 从函数角度看ID到文件路径的内部与外部映射
- C++:将外部库链接到dll库
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 节俭并发:未解决的外部问题
- 如何在c++中从git建立外部库
- 未解析的外部符号_MsiLocateComponentW@12.
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 将CHW格式的浮点向量转换为cv::Mat
- 错误的cv::face FacemarkLBF实例化
- 具有外部"c"和程序集的未定义函数
- 未解决的外部CV :: FLIP CV :: IMShow
- 如何确定 cv::Mat 使用的是内部数据还是外部数据
- cv::使用cv::imdecode后不修改外部数据