reinterpret_cast并与CV_MAT_ELEM一起使用
reinterpret_cast and use with CV_MAT_ELEM
我想放一个8位输入彩色图像的所有数据(输入文件是一个.bmp文件)在新的 16 位垫子阵列中。
我这样做是因为我需要汇总几个图像补丁,然后为每个像素构建平均值。
Mat img = imread(Inputfile); //there now should be values between 0 and 255
例如,解决蓝色值
如下uchar* ptr = img.data + img.step*row;
cout << ptr[n*col] << endl;
只显示单个字母,没有值。
cout << static_cast<short>(ptr[n*col]) << endl;
类型转换为短或更大会显示正确的值。 但是对无符号字符的强制转换(在我看来这是正确的数据类型)比没有任何类型转换时会产生相同的字母。
据我所知,Short 有 2 个字节,但一个颜色.bmp每个通道应该只有 1 个字节的颜色信息。由于我需要总结最坏情况下的 81(较小的 128=7 位)像素值,我认为短作为目标值会很棒。
任何关于简单访问 8 位值并在 16 位数组中使用它们的正确方法的帮助都会很棒。
谢谢。
强制转换工作正常,但如果将未签名的字符发送到输出流中,它将被解释为字符并打印为字符。
另请注意,OpenCV已经具有将矩阵转换为不同数据类型的功能。您甚至可以将图像读入首选数据类型的矩阵中:
cv::Mat3s img = cv::imread(...);
并且忽略使用数据指针。阅读 OpenCV 文档,了解如何以干净的方式访问单个像素或行(迭代器、operator()、operator[]...)。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 在将 new 与指针一起使用时,创建数组的指定长度