【问题标题】:Getting error on C++ & OpenCV: "malloc"在 C++ 和 OpenCV 上出现错误:“malloc”
【发布时间】:2014-09-15 16:46:19
【问题描述】:

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

然后,在我的 ma​​in 上,我正在加载 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 开发人员,这有点烧我的脑子......

我的问题可能是什么?

非常感谢。

【问题讨论】:

  • 您应该使用 CV_8UC1 而不仅仅是 CV_8U 吗?
  • 是的!请您将其发布为答案吗?

标签: c++ opencv malloc


【解决方案1】:

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

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

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

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

另外,在调试模式下运行它可能是个好主意,您的代码会引发适当的异常。

【讨论】:

  • 是的...我再次控制...第一次与CV_8UC1合作,因为我说@Octopus回答...但你是对的!谢谢
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2014-02-21
    • 2022-01-20
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    相关资源
    最近更新 更多