写入Mat-Object子节的问题

时间:2014-06-09 15:46:20

标签: c++ opencv segmentation-fault malloc slice

我是OpenCV的新手,在写入Mat-Object的子范围时遇到一些麻烦。

下面的代码迭代给定的图像。对于每个像素,它采用5x5范围内的像素,找到最亮的像素,并将所有其他像素设置为0.

我多次调用该函数。在随机数量的调用之后,该函数给出了分段错误或“malloc内存损坏”。有时我可以调用函数10次,没有问题,有时只调用两次,然后程序停止。

我将问题追踪到该行,我使用子图像写入原始图像。

subimage.at<uchar>(rowSubimage,colSubimage) = 0;

这个功能让我发疯:

void findMaxAndBlackout(Mat& image, int size){

Point centralPoint;
Size rangeSize = Size(size,size);
Mat subimage;
Rect range;

// iterate the image
for(int row = 0; row <= image.rows-size; row++){
    for(int col = 0; col <= image.cols-size; col++){
        centralPoint = Point(col,row);
        range = Rect(centralPoint, rangeSize);

            // slice submatrix and find max
        subimage = image(range);
        double max;
        minMaxLoc( subimage, NULL, &max, NULL, NULL );

            // iterate the surrounding 
        for(int rowSubimage  = 0; rowSubimage <= subimage.rows; rowSubimage++){
            for(int colSubimage = 0; colSubimage <= subimage.cols; colSubimage++){
                if(subimage.at<uchar>(rowSubimage,colSubimage) < max){
                    //this line cause the trouble
                    subimage.at<uchar>(rowSubimage,colSubimage) = 0;
                }
            }
        }
    }
}}

Mat-Object使用:

生成
Mat houghImage = imread("small_schachbrett1_cam.png", CV_LOAD_IMAGE_GRAYSCALE);

请帮我理解这个问题。

如果您知道更好或更有效的方法来获得相同的结果,请告诉我。我愿意接受任何改进

此致 benniz

1 个答案:

答案 0 :(得分:0)

你超出范围:

row <= image.rows-size
col <= image.cols-size
rowSubimage <= subimage.rows
colSubimage <= subimage.cols

应该是

row < image.rows-size
col < image.cols-size
rowSubimage < subimage.rows
colSubimage < subimage.cols