我是OpenCV的新手,目前正在使用OpenCV2.4.8。 我有2个源文件;一个是main,另一个是编译为main.cpp调用的共享库。
当我尝试在从网络摄像头获取帧后在main中打印frame.depth()时,它返回0(应该是CV_8U);但是,当我将它传递给共享库时,它会在depth()调用中返回1。我在Mat上没有改变任何东西。任何人都可以帮助解释为什么深度和类型在传递给lib后会发生变化;我错误地传递了引用吗?
提前致谢。
迪克
以下是Main.cpp的源代码
using namespace cv;
void onMouse(int event, int x ,int y, int flags,void* param);
int main(int argc,char** argv){
VideoCapture cap(-1);
Mat frame;
Mat grey;
double width;
double height;
namedWindow("WebCam",1);
cvSetMouseCallback("WebCam",onMouse,NULL);
width = cap.get(CV_CAP_PROP_FRAME_WIDTH);
height = cap.get(CV_CAP_PROP_FRAME_HEIGHT);
grey = Mat(height,width,CV_8UC1);
while(1){
cap >> frame;
printf("frame.depth %d\n",frame.depth()); // it will return 0;
printf("frame.type %d\n",frame.type()); // it will return 16;
preprocessing(frame,grey); // pass to share lib
imshow("WebCam",grey);
if(cvWaitKey(1)>=0){
break;
}
}
cvDestroyWindow("WebCam");
return 0;
}
这是preprocess.cpp的源代码;它被编译为libpreprocess.so
void preprocessing(const Mat &imgSrc,Mat &resultImg)
{
printf("imgSrc.depth %d\n",imgSrc.depth()); // here, it will return 1;
printf("imgSrc.type %d\n",imgSrc.type()); // here it will return 1;
}