Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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++ Mat::at<;双倍>;(i,j)SIGSEGV,分段故障_C++_Opencv_Matrix_Segmentation Fault - Fatal编程技术网

C++ Mat::at<;双倍>;(i,j)SIGSEGV,分段故障

C++ Mat::at<;双倍>;(i,j)SIGSEGV,分段故障,c++,opencv,matrix,segmentation-fault,C++,Opencv,Matrix,Segmentation Fault,我一直在研究我正在维护的特定代码,似乎不知道为什么会发生错误。 我在和上检查了一个类似的错误,但提供的建议似乎并不能解决我的问题 给定一个Mat图像,其中行261和列264 int i = image.rows; int j = image.cols; int nbs[4][2] = {{i-1,j},{i,j-1},{i,j+1},{i+1,j}}; for (int n = 0; n < 4; n ++) { int k = nbs[n][0]; int l = nb

我一直在研究我正在维护的特定代码,似乎不知道为什么会发生错误。 我在和上检查了一个类似的错误,但提供的建议似乎并不能解决我的问题

给定一个
Mat
图像,其中
行261
列264

int i = image.rows;
int j = image.cols;
int nbs[4][2] = {{i-1,j},{i,j-1},{i,j+1},{i+1,j}};

for (int n = 0; n < 4; n ++)
{
    int k = nbs[n][0];
    int l = nbs[n][1];
    renew_gI_gT(k, l);
}

void get_gT( int i, int j )
{
    // gT_x
    int d = 0;
    double sum = 0.0;
    if( i >= 0 && j - 1 > 0 && f.at<uchar>( i, j - 1 ) != INSIDE )
    {
        d += 1;
        sum += T.at<double>( i, j ) - T.at<double>( i, j - 1 );
    }
    if( i >= 0 && j + 1 < image.cols && f.at<uchar>( i, j + 1 ) != INSIDE )
    {
        d += 1;
        sum += T.at<double>( i, j + 1 ) - T.at<double>( i, j );
    }
    if( d != 0 )
    {
        sum = sum / d;
        gT_x.at<double>( i, j ) = sum;
    }

    // gT_y
    d = 0;
    sum = 0.0;
    if( i >= 0 && i - 1 > 0 && f.at<uchar>( i - 1, j ) != INSIDE )
    {
        d += 1;
        sum += T.at<double>( i, j ) - T.at<double>( i - 1, j );
    }
    if( i >= 0 && i + 1 < image.rows && f.at<uchar>( i + 1, j ) != INSIDE )
    {
        d += 1;
        sum += T.at<double>( i + 1, j ) - T.at<double>( i, j );
    }
    if( d != 0 )
    {
        sum = sum / d; 
        gT_y.at<double>( i, j ) = sum; // gdb debugger says this line causes SIGSEGV, Segmentation fault. when i=261, j=249
    }
    // printf("[%d,%d] &f %f\n", i, j, gT_x.at<double>(i, j), gT_y.at<double>(i, j));
    // return;
}


void renew_gI_gT( int i, int j )
{
    get_gI( i - 1, j );
    get_gI( i, j - 1 );
    get_gI( i, j );
    get_gI( i, j + 1 );
    get_gI( i + 1, j );

    get_gT( i - 1, j );
    get_gT( i, j - 1 );
    get_gT( i, j );
    get_gT( i, j + 1 );
    get_gT( i + 1, j );

    // return;
}
int i=image.rows;
int j=image.cols;
int-nbs[4][2]={{i-1,j},{i,j-1},{i,j+1},{i+1,j};
对于(int n=0;n<4;n++)
{
int k=nbs[n][0];
int l=nbs[n][1];
续约(k,l);;
}
void get_gT(int i,int j)
{
//gT_x
int d=0;
双和=0.0;
如果(i>=0&&j-1>0&&f.at(i,j-1)!=内部)
{
d+=1;
总和+=T.at(i,j)-T.at(i,j-1);
}
如果(i>=0&&j+1=0&&i-1>0&&f.at(i-1,j)!=内部)
{
d+=1;
总和+=T.at(i,j)-T.at(i-1,j);
}
如果(i>=0&&i+1
Mat图像(是全局变量)的初始化如下所示

T = Mat( image.rows, image.cols, CV_64FC1 );
f.create( image.rows, image.cols, CV_8UC1 );
gT_x = Mat( image.rows, image.cols, DataType<double>::type ); //CV_64FC1;
gT_y = Mat( image.rows, image.cols, DataType<double>::type ); //CV_64FC1;
T=Mat(image.rows、image.cols、CV_64FC1);
f、 创建(image.rows、image.cols、CV_8UC1);
gT_x=Mat(image.rows,image.cols,数据类型::type)//CV_64FC1;
gT_y=Mat(image.rows,image.cols,数据类型::type)//CV_64FC1;
挑战在于,当使用单个图像时,该程序开始工作。 当我通过一组图像循环使用该程序处理该图像集中的每一幅图像时,我得到了SIGSEGV,上面指定的行的分割错误。 现在,它甚至不再适用于单个图像

我不确定某个地方是否有我看不见的虫子


等待您的建议

矩阵坐标为零索引,因此给定一个
Mat
,行数=261
,如果您在(i,j)调用
,则
i
的范围可能为0到260。参见处的示例代码。

矩阵坐标为零索引,因此给定一个
Mat
,行数=261
,如果调用
at(i,j)
,则
i
的范围可能在0到260之间。参见处的示例代码。

矩阵坐标为零索引,因此给定一个
Mat
,行数=261,如果调用
at(i,j)
,则
i
的范围可能在0到260之间。参见处的示例代码。

矩阵坐标为零索引,因此给定一个
Mat
,行数=261,如果调用
at(i,j)
,则
i
的范围可能在0到260之间。请参阅上的示例代码