需要帮助解引用这个uchar*来打印它的内容
Need help dereferencing this uchar* to print its contents
这是我正在运行的代码,用于参考我将在代码底部询问的内容:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/highgui/highgui_c.h"
#include <iostream>
using namespace cv;
using namespace std;
uchar* cv_Mat_ptr_index(Mat* self, int i) {
return self->ptr(i);
}
Mat* cv_create_Mat_typed(int rows, int cols, int type) {
return new Mat(rows, cols, type);
}
int main( )
{ uchar a;
float data[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} };
Mat* mat = cv_create_Mat_typed(4, 2, CV_64F);
for(int i = 0; i < 4; i++){
for(int j = 0; j < 2; j++){
cv_Mat_ptr_index(mat, i)[j] = data[i][j];
printf("%in", cv_Mat_ptr_index(mat, i)[j]);}}
}
在for循环的正上方是我用来将"data"的内容添加到矩阵"mat"中的包装器函数。它被称为cv_Mat_ptr_index。在cv_Mat_ptr_index(mat, i)[j] = data[i][j];
这行,它将"data"中的所有数据设置为"mat"。我试图让这行printf("%in", cv_Mat_ptr_index(mat, i)[j])
将数据的内容打印为4x2矩阵,即这正是:
501 10255年10501 255501
,但我能得到的最好的是下面。我尝试改变for循环结束括号的位置。试着用%i, %s,%u打电话,因为号码错了…我改变了第二个cv_Mat_ptr_index ` line by taking off the
[j] ',它将该行更改为uchar*输出,因此我可以使用u%。尝试使用cout.
. .我可以继续下去,但是我可以使用一点帮助,让printf("%in", cv_Mat_ptr_index(mat, i)[j]
行像上面一样打印矩阵。我在一个项目中使用这个,我不能以任何方式改变前2 C包装。我试着停止使用mat::at,所以学习如何用这个函数打印矩阵会很有帮助。
245
10
255
10
245
255
10
245
在我看来,问题出在这一行
cv_Mat_ptr_index(mat, i)[j] = data[i][j];
因为cv_Mat_ptr_index(mat, i)
返回一个等价于
uchar *
uchar *mptr = cv_Mat_ptr_index(mat, i);
mptr[j] = data[i][j];
在此过程中,data[i][j]
被转换为uchar
,这意味着数据只能在0到255之间。请注意,该范围内的所有数字都可以正常工作。唯一超出该范围的数字是501,它被转换成245。
我不熟悉cv_Mat
函数族,但我看到cv_create_Mat_typed
函数将类型作为其第三个参数。必须有一个对应的函数返回相同的类型,所以您的任务是找到该函数。
同时,使用正确的格式说明符:
printf("%hhun", cv_Mat_ptr_index(mat, i)[j]) ;
问题是它首先是uchar,所以是的,正确的格式不会有帮助。无论如何,如果有cv_create_Mat_typed使用CV_64F,也许有一个相关的
cv_Mat_ptr_index_cv_64f(Mat *self, int i)
如果你没有找到,我认为,作为最后的手段,你可以尝试将它转换为*float
((float*) cv_Mat_ptr_index(mat, i)[j] ) = data[i][j];
printf("%fn", ( (float*)cv_Mat_ptr_index(mat, i)[j] ) );
我没有尝试运行或编译这个,所以它可能有拼写错误。关键是,原始Mat对象可能为该类型分配了足够的空间。希望你能走运。
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- 打印数字图案
- Log4cpp:以UTC/GMT时区打印日期
- 需要帮助解引用这个uchar*来打印它的内容