返回信息流先这样定义的:
float m[4][2]={{501,10},{255,10},{501,255},{10,501}};
Mat t(4,2,CV_32FC1,m);
然后cout t,是[501,10;255,10;501,255;10,501],是对的,但是如果我这么写:
int m[4][2]={{501,10},{255,10},{501,255},{10,501}};
Mat t(4,2,CV_16UC1,m);
cout t,输出就变成了[501,0;10,0;255,0;10,0],显然不对,这是为什么呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #96818同步于 2017/11/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
opencv问题,为什么这样定义的Mat输出不对呢?
singingwheat
2017/11/17镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
这种初始化Mat方式内存是共享的,显然int和CV_16UC1(16位无符号类型)是不兼容的,换成CV_32SC1(32位有符号类型)就可以了。
至于错误的输出结果的原因。int 501 二进制00000000000000000000000111110101,一般机器小端存储,也即低位在前,高位在后,被Mat按照 unsign short读取,就变成了0000000111110101 和 0000000000000000两个数了,也即501和0。
如果全部转换
int m2[4][2] = {{501,10},{255,10},{501,255},{10,501}};
Mat t2(1,16, CV_16UC1, m2);
cout<<t2<<endl;
则得到 [501, 0, 10, 0, 255, 0, 10, 0, 501, 0, 255, 0, 10, 0, 501, 0]
就是这样了。
明白了,非常感谢您
【 在 byrssss 的大作中提到: 】
: 这种初始化Mat方式内存是共享的,显然int和CV_16UC1(16位无符号类型)是不兼容的,换成CV_32SC1(32位有符号类型)就可以了。
: 至于错误的输出结果的原因。int 501 二进制00000000000000000000000111110101,一般机器小端存储,也即低位在前,高位在后,被Mat按照 unsign short读取,就变成了0000000111110101 和 0000000000000000两个数了,也即501和0。
: 如果全部转换
: ...................