【发布时间】:2021-12-20 19:45:19
【问题描述】:
我试图创建一个直方图,但我无法分配任何大于 255 的值,如果它超过示例 256,它将为 0,依此类推。我该如何解决?
histMatrix = Mat(nChannelSource, 256, CV_16SC1);
uchar* pRowHistMatrix = histMatrix.data;
for (int y = 0; y < nChannelSource; y++, pRowHistMatrix += histMatrix.step[0]) {
uchar* pColHistMatrix = pRowHistMatrix;
for (int x = 0; x < 256; x++, pColHistMatrix += histMatrix.step[1]) {
((signed short*)pColHistMatrix)[0] = 256;
}
}
pRowHistMatrix = histMatrix.data;
for (int y = 0; y < nChannelSource; y++, pRowHistMatrix += histMatrix.step[0]) {
uchar* pColHistMatrix = pRowHistMatrix;
for (int x = 0; x < 256; x++, pColHistMatrix += histMatrix.step[1]) {
std::cout << (int)pColHistMatrix[0] << " ";
}
}
【问题讨论】:
-
您使用的是
unsigned char,它通常只有 8 位,因此不能保存大于 255 的值 -
我试过CV_16SC1,结果一样
-
存储在矩阵中的数据类型是 16 位,但您正在转换为
uchar* -
非常感谢,祝您有美好的一天。新手太难了,我会尽快解决的
-
首先你应该删除所有的指针算法并使用
histMatrix.at<short>(i,j)方法来访问矩阵...