我正在拍摄一些图像,并将它们切割成尺寸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。