我一直在与一个涉及矩阵数据丢失的可怕问题作斗争,因为矩阵(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 );
}
Mat& FOREGR_BUFFER_CONNECTORS与Mat FOREGR_BUFFER_CONNECTORS。
我尝试在函数调用中创建数据的显式副本:
Find_Contours_Validate(IMPORTED_IMAGE,...,FOREGR_BUFFER_CONNECTORS.clone(),...);
我尝试将空缓冲区传递给函数但复制函数内的数据:
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在函数调用之外显示正常但在内部显示为空。
正如我所说:问题只会在我将代码作为链接到集成应用程序的静态库运行时出现(而不是在我独立运行时)。
有什么建议吗?