【问题标题】:OpenCV Error: AssertionOpenCV 错误:断言
【发布时间】:2018-05-19 21:03:07
【问题描述】:
Mat m1 = Mat(500, 300, CV_64F, Vec3b(255,255,255));
  for (int i = 0; i < m1.rows; ++i)
    for (int j = 0; j < m1.cols; ++j)
    {
        Vec3b color=m1.at<Vec3b>(Point(i, j));
    }
imshow("test2", m1);
waitKey();

变量颜色应该包含白色像素的颜色,但是当我运行代码时出现错误:

OpenCV 错误:断言失败 (((((sizeof(size_t)> ((traits::Depth<_tp>::value) & ((1

【问题讨论】:

  • Mat的数据类型应该是CV_8UC3而不是CV_64F。此外,坐标应为Point(j, i) 而不是Point(i, j)

标签: c++ opencv image-processing


【解决方案1】:

错误消息告诉您需要了解的内容。你已经越界了!

试试:

Point(j, i)

列对应于x。行对应y

【讨论】:

  • 我已经有一段时间没有使用 OpenCV 了。尝试改用Mat_。另外,试试Vec3b color=m1.at&lt;Vec3b&gt;(i, j);
  • Visual Studio 无法识别 Mat_,我确实尝试使用 m1.at(j, i);它不起作用
  • @BahiAli 您需要使用相同类型的数据,现在您有一个带有双精度通道的矩阵,您尝试访问它,就好像它是一个由 3 个通道和 uchar 组成的矩阵。要么将 CV_64F 更改为 CV_8UC3,要么将所有 Vec3b 更改为 double
【解决方案2】:

试试这个

Mat m1 = Mat(500, 300, CV_64F, Vec3b(255,255,255));
  for (int i = 0; i < m1.rows; ++i)
    for (int j = 0; j < m1.cols; ++j)
    {
        Vec3b color=m1.at<Vec3b>(i, j);//changed
    }
imshow("test2", m1);
waitKey();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2016-08-02
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多