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里边用指针挺爽的 |