gpt4 book ai didi

c++ - reinterpret_cast 并与 CV_MAT_ELEM 一起使用

转载 作者:太空宇宙 更新时间:2023-11-03 23:03:17 25 4
gpt4 key购买 nike

我想把一个8位输入彩色图像的所有数据(输入文件是一个.bmp文件)在一个新的 16 位 Mat 数组中。

我这样做是因为我需要总结几个图像 block ,然后为每个像素构建平均值。

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 或 bigger 会产生正确的值。但是转换为 unsigned char(我认为这是正确的数据类型)会产生与没有任何类型转换相同的 Letters。

据我所知,Short 有 2 个字节,但是颜色 .bmp 每个 channel 应该只有 1 个字节的颜色信息。因为我需要在最坏情况下总结 81(较小的 128=7 位)像素值,所以我认为将 short 作为目标值会很好。

任何有关以正确方式简单访问 8 位值并在 16 位数组中使用它们的帮助都会很棒。

谢谢。

最佳答案

转换工作正确,但如果您将一个无符号字符发送到输出流,它将被解释为一个字符并打印为一个字符。

另请注意,OpenCV 已经具有将矩阵转换为不同数据类型的功能。您甚至可以将图像读入首选数据类型的矩阵:

cv::Mat3s img = cv::imread(...);

并且不考虑使用数据指针。阅读 OpenCV 文档,了解如何以简洁的方式访问单个像素或行(迭代器、operator()、operator[]...)。

关于c++ - reinterpret_cast 并与 CV_MAT_ELEM 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10318568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com