我注意到使用convertTo将矩阵从32位转换为16位时,“四舍五入”会将数字舍入到上限。 所以,在源矩阵中大于0x0000FFFF的值将设置为目标矩阵中的0xFFFF。
我的应用程序需要的是遮罩值,仅在目标值中设置2个LSB的值。
以下是示例:
矩阵具有以下值:
在16位矩阵的第二行,我想要有:
我的应用程序需要的是遮罩值,仅在目标值中设置2个LSB的值。
以下是示例:
Mat mat32;
Mat mat16;
mat32 = Mat(2,2,CV_32SC1);
for(int y = 0; y < 2; y++)
for(int x = 0; x < 2; x++)
mat32.at<unsigned int>(cv::Point(x,y)) = 0x0000FFFE + (y*2+x);
mat32.convertTo(mat16, CV_16UC1);
矩阵具有以下值:
32 bits matrix:
0000FFFE 0000FFFF
00010000 00010001
16 bits matrix:
0000FFFE 0000FFFF
0000FFFF 0000FFFF
在16位矩阵的第二行,我想要有:
00000000 00000001
我可以通过逐个扫描源矩阵的值并进行掩码处理来完成这个任务,但是性能较低。
是否有一个OpenCV函数可以实现这个功能?
感谢大家!
MIX