我正在尝试使用 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 关注
- 173 浏览
添加回答
举报
0/150
提交
取消