【问题标题】:OpenCV Error: Assertion failed in matrix.cpp line 522, /matrix.cpp:522: error: (-215)OpenCV 错误:matrix.cpp 第 522 行中的断言失败,/matrix.cpp:522:错误:(-215)
【发布时间】:2017-08-25 18:43:54
【问题描述】:

我正在尝试在检测到的面部上方创建一个 ROI,以放置如图所示的帽子:请点击此处:ROI created above face to place a hat

我已确保创建的 ROI 在图像的范围内。它看起来像这样: // 创建一个投资回报率 // 其中face是检测到的人脸ROI

    if (0<=face.x && 0<=face.x-face.width*0.08<=image.cols && 0<=face.x+face.width+face.width*0.08<=image.cols 
         && 0<=face.y && 0<=face.y-face.height*0.28<=image.rows)
    {
      Mat ROI_hat = image(Rect(abs(face.x-face.width*0.08),abs(face.y-face.height*0.28),abs(face.x+face.width+face.width*0.08),abs(face.y)));
      rectangle(image,Point(abs(face.x-face.width*0.08),abs(face.y-face.height*0.28)),Point(abs(face.x+face.width+face.width*0.08),abs(face.y)),Scalar(255, 0, 0), 1, 4);

      cout<<"Within the bounds of Image"<<endl;
    }
    else{
     cout<<" Out of bounds of Image "<<endl;
        }

没有负值,并且对于每一帧,它都表示投资回报率在界限内。但我仍然得到断言错误:

OpenCV 错误:断言失败 (0

谁能告诉我哪里出错了?

【问题讨论】:

  • 错误信息是什么?
  • OpenCV 错误:断言失败 (0
  • 那么您的投资回报率在图像之外...再次检查您的条件
  • 你能详细说明一下吗?我听不懂你想说什么
  • 部分 ROI 超出图像边界

标签: c++ opencv


【解决方案1】:

错误意味着你的ROI在图像之外,所以你的条件是错误的。

由于很容易混淆,我通常会应用这个小技巧,它基于 roi 与包含所有图像的 dummy roi roiImg 的交集:

Rect roiImg(0, 0, image.cols, image.rows);
Rect roi = ... // Very complex way of setting up the ROI

if( (roi.area() > 0) && ((roiImg & roi).area() == roi.area()) ) {
    // roi is inside the image, and is non-empty
    // VALID roi
} else {
    // roi is at least partially outside of the image, or it's empty
    // INVALID roi
}

【讨论】:

  • 我使用了上面的条件,但我得到了同样的错误。我不明白 ((roiImg & roi).area() == roi.area()) 如何帮助评估它是否在图像范围内。另外请看一下我附上的图像,当我绘制 ROI 时,它总是只在图像内。一段时间后它崩溃了
  • 我开始逐行调试代码,发现有一个点位于图像之外。所以它崩溃了。我修好了它。还是谢谢三木
猜你喜欢
  • 1970-01-01
  • 2017-12-24
  • 2019-12-04
  • 2021-09-10
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
相关资源
最近更新 更多