2016-01-29 71 views
0

我需要將Mat 8UC1 [0,255]的值替換爲cv :: Mat lookUpTable(1,256,CV_16UC1)的值;我檢查了這個OpenCV tutorial的一個解釋,它是最快的方法,但是,當Im檢查每個位置的LUT的分配值時,我只丟掉8位,所以我丟失了其他的8位。這是源代碼:openCV查找表16CU1

unsigned short int zDTableHexa[256]={0}; 
    .... get the values... 
    cv::Mat lookUpTable(1, 256, CV_16UC1); 
    uchar* p = lookUpTable.data; 
    for(int i = 0; i < 256; i++){ 
     p[i] = zDTableHexa[i]; 
     cout<<(int)p[i]<<":"<<zDTableHexa[i]<<sizeof(p[i])<<":"<<sizeof(zDTableHexa[i])<<endl; 
    } 

的打印結果是:

104:872
101:869
97:865
93:861
90:858
86 :854
83:851
80:848
76:844
73:841
70:838
66:834
63:831

當我在二進制檢查是僅僅第一8位。 據我所知,指針是UCHAR(8位),但我如何分配完整的值?

回答

1

嘗試

unsigned short* p = (unsigned short*) lookUpTable.data; 
+0

由於它的工作! – aburbanol

0

OpenCV的LUT工作只是CV_8U,這樣你就可以做3分裂的數字是什麼,也就是3倍CV_8U,或CV_8UC3。但是,在LUT中不能有多於256個元素,而不能有其他值大於0..255的值作爲索引。

換句話說,你可以解析uchar s到uchar S或uchar s到float S:CV_8UC1 - > CV_8UC1或CV_8UC1 - > CV_8UC3(我沒有嘗試過絲毫CV_8UC4,它可以工作)。

爲了得到cv::Vec3b


我發現this CV_8UC3檢查的內容,您可能感興趣的