【问题标题】:C++ OpenCV mat.at gives access violation when using dataC++ OpenCV mat.at 使用数据时出现访问冲突
【发布时间】:2012-03-09 02:05:11
【问题描述】:

我在 Visual Studio 2010 C++ dll 中使用 openCV 2.1 来执行矩阵运算。 dll 从 VB.NET 程序接收数组并将它们加载到矩阵中以进行一些操作。但是,如果不引发访问冲突异常,我不能在任何 cv::mat 对象上使用 .at 成员。我以为是因为我传入了数组,但我什至无法运行:

Mat Rhat(2,1,CV_32FC1);
Rhat.at<double>(0,0) = 10;
Rhat.release();

如果我删除 .at 行,那么它运行良好。我使用 CvMat 类型完成了整个工作,但它不喜欢 cvCreateMat 并开始使用 cv 命名空间。我在 dll 中的所有非 opencv 函数都可以正常工作,所以问题出在我的 cv 设置或其他问题上。
有人可以帮忙吗?

【问题讨论】:

    标签: c++ dll opencv access-violation


    【解决方案1】:

    问题是您创建了一个浮点矩阵 (32FC1),并且您尝试使用 double 访问它,这会导致访问越界。

    你可以在任何地方使用浮点数:

    Mat Rhat(2,1,CV_32FC1);
    Rhat.at<float>(0,0) = 10;
    Rhat.release();
    

    或双倍:

    Mat Rhat(2,1,CV_64FC1);
    Rhat.at<double>(0,0) = 10;
    Rhat.release();
    

    【讨论】:

    • 谢谢。就是这样。哎呀。还有其他问题。我无法执行任何操作。不过我会开始一个新线程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多