我正在嘗試使用 Go 中的 OpenCV。OpenCV 定義了一個CvMat具有data字段的結構體:typedef struct CvMat{ ... union { uchar* ptr; short* s; } data;}我正在使用此處找到的 opencv 綁定。這有一個類型別名CvMat:type Mat C.CvMat現在我有一個Mat對象,我想訪問data它的字段。我怎樣才能做到這一點?如果我嘗試訪問_data,它不起作用。我Mat用reflect包打印了對象上的字段并得到了這個:...{data github.com/lazywei/go-opencv/opencv [8]uint8 24 [5] false}...所以上面有一個data字段,但它甚至不是同一種類型。這是一個 8uint8秒的數組!我正在尋找一個uchar*比 8 個字符長得多的字符。我如何才能做到這一點uchar?
1 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
簡短的回答是,如果不修改go-opencv
. 這里有一些障礙:
導入包時,只能使用已導出的標識符。在這種情況下,
data
不以大寫字母開頭,因此不會導出。即使它是一個導出的標識符,你也會遇到麻煩,因為 Go 不支持聯合。因此,該字段由一個字節數組表示,該數組與底層 C 聯合的大小相匹配(在本例中為 8 個字節,與 64 位指針的大小相匹配)。
最后,強烈建議不要
cgo
從包中公開類型。因此,即使在這種可以直接訪問底層 C 結構的情況下,我也建議不要這樣做。
理想情況下go-opencv
會為您所追求的信息提供一個訪問器(大概是一個可以檢查聯合的哪個分支正在使用的訪問器,而不是默默地返回錯誤數據。我建議您要么在包上提交錯誤報告(可能帶有補?。?),或者如果您立即需要該功能,則創建帶有所需修改的私人副本。
- 1 回答
- 0 關注
- 198 瀏覽
添加回答
舉報
0/150
提交
取消