c++ - C++中的OpenCV图像数据类型转换

标签 c++ opencv

例如,我正在尝试在 C++ 中将图像数据从 char 转换为 double

Mat img = imread(image_file);
Mat img_double;
img.convertTo(img_double, CV64FC3);

然后我认为 img_double 应该将图像数据存储在 DOUBLE 中,我尝试了 img_double.depth() 它显示为 6,这是正确的。但是,如何访问该 DOUBLE 数据? img_double.data 仍然是 uchar* 类型。有谁能够帮助我?谢谢!

最佳答案

C/C++ 使用 unsigned char作为一堆字节的通用数据类型。 因此,在 cv::Mat 中有一个 uchar 数据指针避免为每种类型的图像更改 thsi 指针的声明,从而避免子类化 cv::Mat并允许通过 memcpy 直接传输数据或指针矫揉造作。

然后使用转换来返回库用户所需的数据类型。

请注意,OpenCV 2.x 为您提供了模板化函数 cv::Mat::ptr<type>(ìnt rowIndex)获取指向给定行开头的指针。 例如,指向 double 数据类型的灰度图像第​​ 6 行开头的指针是通过以下方式完成的:

double *rowPtr = my_mat.ptr<double>(6)

关于c++ - C++中的OpenCV图像数据类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15469120/

相关文章:

c++ - cmake -D <变量> :<type>=<value> what does the parameter "-D" mean

OpenCV Mat 元素类型及其大小

c++ - 有什么理由不使用 c++0x 进行 iOS 开发吗?

c++ - 使用默认构造值初始化 std::map

c++ - 为什么程序在仅加入 1 个线程但有 5 个线程时可以正常工作

C++ 和标准容器 : memory addresses of members

opencv - 基本立体 block 匹配的不良结果(没有 OpenCV)

c++ - 不使用霍夫圆检测圆

linux - opencv videocapture 无法打开 MJPEG 流

c++ - 使用 boost 创建 6 位 crc