C#与C++混合编程通过openCV调用摄像头

最近要做一个程序,程序主体用C#写的,要使用摄像头。

最先考虑的是用C++调用openCV写成dll,给C#调用。后来感觉有点复杂就转而使用EmguCV了。

但是使用中发现两个bug,其一是无法得到摄像头的名字(这个可以通过C#本身枚举系统设备实现,但是这之后还是遇到一个bug,摄像头名字跟编号不对应,有两个摄像头的话,用VidioCapture打开后是另外一个),其二是通过使用SetCaptureProperty方法修改摄像头参数时无效,网上搜了半天竟然没有人遇到类似问题,也无无从解决,真是莫名其妙。

又考虑到后续还有很多图像处理工作要用OpenCV,在C#里通过EmguCV调用效率恐怕也难以保证。

于是下定决心,回过头来再研究一下C++与C#混合编程的方法。

基本思路是,在C++中调用openCV读取摄像头的数据,传回给C#显示在PictureBox中。具体实现方法是通过将C#中的IntrPtr类型传入C++的函数,在其中赋值。

测试如下,在C++中

extern "C" __declspec(dllexport) void Test2(unsigned char* x) {
	for (int i = 0; i < 10; i++)
		x[i] = i;
}

在C#中,声明外部函数

[DllImport("C:\\Users\\boron\\source\\repos\\CVUtilityDll\\debug\\CVUtilityDll.dll"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值