在C++和OpenCV上出错:"malloc"



我正在拍摄一些图像,并将它们切割成尺寸dimensionImage x dimensionImage,尺寸为256x256,如下所示:

Mat getKdimensionImage(String file, int dimension) {
    Mat result = Mat::zeros(dimension, dimension, CV_8U);
    Mat currentImage = imread(file, CV_LOAD_IMAGE_GRAYSCALE);
    for (int i = 0; i < dimension; i++) {
         for (int j = 0; j < dimension; j++) {
            result.at<int>(i,j) = currentImage.at<int>(i,j);
         }
    }
return result;
}

然后,在我的main上,我正在加载2个图像:

Mat face1 = getKdimensionImage(path + "FACE/face1.jpg", dimensionImage);
Mat face2 = getKdimensionImage(path + "FACE/face2.jpg", dimensionImage);

但当我开始加载face2时,我得到:

OpenCVtry(18811,0x7fff73568310)malloc:*对象0x10381d608的错误:释放的对象的校验和不正确-对象可能在释放后被修改。*在malloc_error_break中设置断点以调试

对不起,我是Java开发人员,这有点伤脑筋。。。

我可能有什么问题?

非常感谢。

由于错误的类型访问,这里有缓冲区溢出:

result.at<int>(i,j) = currentImage.at<int>(i,j);

两个Mat都是uchar,而不是int,所以它必须是:

result.at<uchar>(i,j) = currentImage.at<uchar>(i,j);

此外,如果在调试模式下运行,您的代码会抛出一个适当的异常,这可能是一个好主意。

我不确定OpenCV是否正确解释了CV_8U。我相信你想要CV_8UC1。

相关内容

  • 没有找到相关文章