OpenCV,我得到分割,无法找到它

时间:2017-04-02 11:05:06

标签: c++ opencv segmentation-fault

我对C ++很新,所以我真的不知道出了什么问题。我在这里有一个函数来获取orignal_image并使其成为一个油页。 https://www.codeproject.com/Articles/471994/OilPaintEffect 我按照这些步骤操作,但仍然遇到分段错误。

cv::Mat getFilteredImage(const cv::Mat &original_image,
                     int radius,
                     int levels)
{


for(int i=0;i<original_image.rows;i++)
{
    for(int j=0;j<original_image.cols;j++)
    {
        for(int k=-radius;k<=radius;k++)
        {
            for(int l=-radius;l<=radius;l++)
            {
                int IB = original_image.at<cv::Vec3b>(j,i)[0]; 
                 int IG = original_image.at<cv::Vec3b>(j,i)[1]; 
                int IR = original_image.at<cv::Vec3b>(j,i)[2]; 



                int intervall = floor(((double)((IR+IG+IB)/3.0) * (levels/255.0)));//eine Pixel intensität errechen

                if(intervall>255)
                {
                    intervall = 255;
                }
                std::vector<int> intensityCount;
                intensityCount[intervall]++;

                int averageB[intervall];
                int averageG[intervall];
                int averageR[intervall];

                averageB[intervall] += IB;
                averageG[intervall] += IG;
                averageR[intervall] += IR;


                }


            }

                int Curmax=0;
                int maxIndex;

                for(int nI = 0; nI<256;nI++)
                {
                    if(intensityCount[nI]>Curmax)  //this is not allowed
                    {
                        Curmax = intensityCount[nI];
                        maxIndex = nI;

                    }



        }


    }

}


cv::Mat output = cv::Mat::zeros(original_image.size(),
                                original_image.type());




return output;
}

1 个答案:

答案 0 :(得分:1)

std::vector<int> intensityCount;
intensityCount[intervall]++;

这并不能解决你的问题。第一行声明并初始化向量。这意味着您的第二行将访问未初始化的内存,这是您的段错误的原因。要解决此问题,请使用给定尺寸(std::vector<int> intensityCount(yourSizeHere))初始化矢量或使用push backemplace back