Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将矩阵传递到函数时数据的严重丢失(OpenCV 2.4.6和Qt 4.8.4)_C++_Qt_Opencv_Matrix - Fatal编程技术网

C++ 将矩阵传递到函数时数据的严重丢失(OpenCV 2.4.6和Qt 4.8.4)

C++ 将矩阵传递到函数时数据的严重丢失(OpenCV 2.4.6和Qt 4.8.4),c++,qt,opencv,matrix,C++,Qt,Opencv,Matrix,我一直在与一个可怕的问题作斗争,这个问题涉及到矩阵数据的丢失,因为矩阵(Mat)作为一个参数传递到我的一个自定义函数中 这个问题让我有些吃惊,因为它在单独运行示例程序(使用Visual Studio 2012编译)时没有出现。对于独立应用程序,数据被传递并处理得很好。只有在将示例应用程序编译到静态库(.lib)并链接到Qt4.8.4下运行的主应用程序时,问题才会出现 基本代码 主应用程序 头文件 函数定义 主要观察结果 对于大多数缓冲区,数据会传入和传出函数Find_courses_Valida

我一直在与一个可怕的问题作斗争,这个问题涉及到矩阵数据的丢失,因为矩阵(Mat)作为一个参数传递到我的一个自定义函数中

这个问题让我有些吃惊,因为它在单独运行示例程序(使用Visual Studio 2012编译)时没有出现。对于独立应用程序,数据被传递并处理得很好。只有在将示例应用程序编译到静态库(.lib)并链接到Qt4.8.4下运行的主应用程序时,问题才会出现

基本代码 主应用程序 头文件 函数定义 主要观察结果
  • 对于大多数缓冲区,数据会传入和传出函数Find_courses_Validate(),这很好
  • FOREGR\u BUFFER\u CONNECTORS在调用Find\u Contours\u Validate()之前包含预期数据
  • FOREGR\u BUFFER\u CONNECTORS在调用Find\u Validate()后立即为空
  • 在调用Find\u Contours\u Validate()之后,导入的\u图像包含预期的数据
  • 考虑的备选方案
  • 我已尝试通过引用和值传递buffer FOREGR\u buffer\u连接器: Mat和FOREGR\U缓冲器连接器与Mat FOREGR\U缓冲器连接器
  • 我已尝试在函数调用中创建数据的显式副本:

    查找轮廓验证(导入的图像,…,FOREGR缓冲区连接器.clone(),…)

  • 我尝试将空缓冲区传递到函数中,但复制函数中的数据:

  • 无效查找\u等高线\u验证(
    Mat导入了您的图像,
    Mat导入的_图像_bin,
    ...
    垫和前端(缓冲器连接器)
    {
    ...
    导入的\u IMAGE\u bin.copyTo(FOREGR\u BUFFER\u连接器);
    imwrite(“FOREGR\u BUFFER\u CONNECTORS2.png”,FOREGR\u BUFFER\u CONNECTORS);
    }

    -->观察结果总是一样的:FOREGR\u BUFFER\u连接器在函数调用外部显示良好,但在内部显示为空。

    正如我所说:只有当我将代码作为链接到集成应用程序中的静态库运行时(而不是单独运行时),问题才会出现



    有什么建议吗?

    我试着通过参数和值传递缓冲区FOREGR\u buffer\u连接器:
    通过参数传递
    是什么意思?C++中没有“传递参数”这一点,你如何观察冒犯矩阵的值?由于
    Mat
    只不过是一个引用计数智能指针,大多数时候通过引用传递它是没有意义的。我的意思是说通过值传递或通过引用传递,如示例语句所示:
    Mat-FOREGR\u BUFFER\u连接器与Mat&FORGR\u BUFFER\u连接器
    IMPORTED_IMAGE_bin.copyTo( FOREGR_BUFFER_CONNECTORS );
    imwrite( "FOREGR_BUFFER_CONNECTORS1.png", FOREGR_BUFFER_CONNECTORS );
    ...
    ind_Contours_Validate( IMPORTED_IMAGE, ..., FOREGR_BUFFER_CONNECTORS, ...);
    
    void        Find_Contours_Validate(
                    Mat                         IMPORTED_IMAGE,
                    ...
                    Mat                         &FOREGR_BUFFER_CONNECTORS );
    
    void        Find_Contours_Validate(
                    Mat                         IMPORTED_IMAGE,
                    ...
                    Mat                         &FOREGR_BUFFER_CONNECTORS )
    {
        ...
        imwrite( "FOREGR_BUFFER_CONNECTORS2.png", FOREGR_BUFFER_CONNECTORS );
    }