将矩阵传递给函数时数据的隐藏丢失(OpenCV 2.4.6& Qt 4.8.4)

时间:2014-07-07 04:07:53

标签: c++ qt opencv matrix

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

这个问题引起了我的一些惊讶,因为它在运行我的示例程序(使用Visual Studio 2012编译)时没有显示出来。在独立应用程序的情况下,数据被传递并处理得很好。当示例应用程序编译成静态库(.lib)并链接到在Qt 4.8.4下运行的主应用程序时,问题才出现。

基本代码

主申请

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 );
}

关键观察

  1. 对于大多数缓冲区,数据传入和传出Find_Contours_Validate()函数就好了。
  2. FOREGR_BUFFER_CONNECTORS在调用Find_Contours_Validate()之前包含预期数据。
  3. FOREGR_BUFFER_CONNECTORS在调用Find_Contours_Validate()后立即为空。
  4. IMPORTED_IMAGE包含调用Find_Contours_Validate()后的预期数据。
  5. 考虑的替代方案

    1. 我尝试通过引用和值传递缓冲区FOREGR_BUFFER_CONNECTORS:
        

      Mat& FOREGR_BUFFER_CONNECTORS与Mat FOREGR_BUFFER_CONNECTORS。

    2.   
    3. 我尝试在函数调用中创建数据的显式副本:

      Find_Contours_Validate(IMPORTED_IMAGE,...,FOREGR_BUFFER_CONNECTORS.clone(),...);

    4. 我尝试将空缓冲区传递给函数但复制函数内的数据:

    5.   

      void Find_Contours_Validate(   
        Mat IMPORTED_IMAGE,   
        Mat IMPORTED_IMAGE_bin,   
        ...   
        Mat& FOREGR_BUFFER_CONNECTORS)   
        {   
              ...   
               IMPORTED_IMAGE_bin.copyTo(FOREGR_BUFFER_CONNECTORS);   
              imwrite(" FOREGR_BUFFER_CONNECTORS2.png",FOREGR_BUFFER_CONNECTORS);   
          }

      - >观察总是相同的: FOREGR_BUFFER_CONNECTORS在函数调用之外显示正常但在内部显示为空。

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


      有什么建议吗?

0 个答案:

没有答案