请问是否可以在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里边用指针挺爽的