请问是否可以在vb里调用opencv?

http://www.opencv.org.cn/forum/viewtopic.php?t=2143

 

OpenCv 里边很多函数以IplImage类型作为参数, VB传递有困难,
建议对OpenCV的函数用自己编写的DLL进行封装一下, 把VB传递
过来的图像数据(byte)传递给自己的dll, 在自己的dll函数头部把数据
格式转化成IplImage, 然后调用Opencv的函数.


void _stdcall cvCenterOfGravity(LPSAFEARRAY FAR *image_in, unsigned short Bmp_Width, unsigned short Bmp_Height)
{

long lElements; HRESULT lResult; // return code for OLE functions
Color_RGB *pArray_in; // pointer to the elements of the array



// how many elements are there in the array
// lElements=(*image_in)->rgsabound->cElements;
lElements=Bmp_Width*Bmp_Height;

// locking the array before using its elements
lResult=SafeArrayLock(*image_in);
// using the array
pArray_in=(Color_RGB*) ((*image_in)->pvData);
IplImage *src=cvCreateImage( cvSize(Bmp_Width,Bmp_Height), IPL_DEPTH_8U, 3 );
memcpy(src->imageData,pArray_in ,lElements*3);
lResult=SafeArrayUnlock(*image_in);


/* 放你自己的程序了 OpenCV处理*/



}


为了方便, 我们是用二维数组传递图像的, 所以用safearray类型来传递.
通过memcpy就把数据拷贝到IplImage, 接下来就是OpenCV的代码了.
我们用OpenCV开发了一套完整的图像处理的DLL公司内部用, 感觉效果
非常好, 谢谢OpenCV.

在VB里边用回调感觉都可以,关键注意你的参数传递是传地址还是传数值,
如果是传地址,其实就是VC里边的指针了,可以在VB里边用VarPtr得到变量
的地址。

感觉VB、VC交叉调用多了,掌握上面的关键点,就可以随意在VB或者VC(一般
封装成DLL)之间来回任意跨越。

因为VB界面做起来方便,所以我一般用VB做界面,其它基本用VC,消息传递
回调等都感觉没有太多区别。VB里边用指针挺爽的

转载于:https://www.cnblogs.com/tecsoon/archive/2009/07/31/1535848.html

你可能感兴趣的:(请问是否可以在vb里调用opencv?)