如何从OpenCV Mat访问浮点值(.at和.ptr除外)
how to access floating point value from opencv Mat (other than .at and .ptr)
float data = matrixm.ptr<float>(i)[j]; - working
float data = matrixm.at<float>(i,j); - working
float data = matrixm.data[i*matrixm.step+j*matrix.elemSize()] - is not giving correct output
我们如何在不使用模板的情况下直接访问浮点数据(.at
,.ptr
(
所以你想要at<>
的功能而不使用它?以下是at<>
有趣的src行:
template<typename _Tp> inline _Tp& Mat::at(int i0, int i1)
...
return ((_Tp*)(data + step.p[0]*i0))[i1];
所以你应该有:
float data = ((float*)(matrixm.data + matrixm.step.p[0]*i))[j];
但是,与呼叫at<>
相比,这有什么优势呢?
您必须首先将数据(类型无符号字符*指针(指针强制转换为浮点指针:
float data = ((float*)matrixm.data)[j+i*matrixm.cols];
仅当图像是连续的时,此操作才有效。或者投射到:
float data = (float)(matrix.data[i*matrixm.step[0]+j*matrix.elemSize()]])
这也适用于 conguos 图像。
对我来说,这看起来不像是XY问题。看起来你是OpenCV世界的新手,你想了解它是如何工作的。
ptr 应该是最好的方法(性能良好(;OpenCV不保证Mat在ram上是一个连续的范围,对于一些足够大的图像,它可以按行划分,并保存在不同的位置。这就是为什么您需要使用 ptr 来获取一行的位置。
相关文章:
- CLANG 编译器 说:变量"PTR"可能未初始化
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 为共享 ptr 向量实现复制 c'tor?
- CMake 用于设定C++标准的设施 "at least C++NN"
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 使用 mat.at<uchar>(i,j) 的 opencv C++中的矩阵赋值错误
- CMake Error at modules/videoio/cmake/detect_ffmpeg.cmake:16
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 两个垫子的 OpenCV 数据是相同的,但使用 Mat::at 检索时的值已损坏
- 引用 std::shared:ptr 以避免引用计数
- 使用 at() 访问 std::map 元素是否比运算符 [] 慢?
- 如何从OpenCV Mat访问浮点值(.at和.ptr除外)
- MOV EAX, DWORD PTR SS:[EBP+8h] 的含义是什么,我怎样才能把它翻译成 AT&T 格式?