我注意到,使用convertTo將矩陣從32位轉換爲16位「rounds」數字到上層。因此,源矩陣中大於0x0000FFFF的值將在目標矩陣中設置爲0xFFFF。OpenCV 2.4.7 Mat :: convertTo()32位到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
根你的問題的原因是OpenCV在cv :: Mat :: convertTo()方法中應用了cv :: saturate_cast。這在文檔中有明確說明。 – sansuiso