OpenCV Mat数据类型通过引用传递给其他共享库

时间:2014-02-21 15:51:12

标签: c++ opencv mat

我是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;
}

0 个答案:

没有答案