数组转Mat遇到的小问题

int b ={9558 , 3469  ,3114  ,1418, 577 , 340 , 106  ,186};
        
    Mat B(8,1,CV_16SC1,b);


结果 B= [9558 ,0, 3469 ,0 ,3114  ,0,1418,0];
不是预期的 【9558 , 3469  ,3114  ,1418, 577 , 340 , 106  ,186】

问题产生原因及解决方法:

主要看你的数组b是什么数据类型,如果你的数组b是int类型的,int四个字节 32位,你的CV_16S是16位的,Mat B(8,1,CV_16SC1,b);  一共8行, 32/16 =2 , 所以你的b数组转到Mat ,两行代表原数组的一位, 如果设置设置成Mat B(16,1,CV_16SC1,b);   结果就是 B = [9558 , 0,3469 ,0 ,3114 ,0 ,1418,0, 577 ,0, 340 ,0, 106 ,0 ,186,0] ,  要么就把数组定义成short int 类型 与CV_16S对应,要么就把CV_16S改成CV_32S与int对应

猜你喜欢

转载自blog.csdn.net/nienelong3319/article/details/81269150