찾다

 >  Q&A  >  본문

c++ - opencv在访问像素点时终止运行

我进行这样的操作:
image_backup_.at<Vec3b>(xpos + i, ypos + j - 1)[k]
就会终止程序,然后debug下发现call stack:定位到上一行image_backup_.at<Vec3b>(xpos + i, ypos + j - 1)[k]

CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);

大家讲道理大家讲道理2885일 전591

모든 응답(2)나는 대답할 것이다

  • 阿神

    阿神2017-04-17 15:32:29

    at 함수의 매개변수가 x, y가 아닌 (행, 열)에 있어서 out-of-bounds 오류가 발생하므로 둘을 바꿔줘야 합니다.
    x와 y를 사용해야 하는 경우 at(cv::Point(x,y))를 사용할 수 있습니다.
    또한 opencv는 예외를 발생시킵니다. catch(std::Exception e)를 사용하여 예외를 포착하고 오류 정보를 볼 수 있습니다.

    회신하다
    0
  • 阿神

    阿神2017-04-17 15:32:29

    라는 이름의 함수에는 일반적으로 경계 검사가 있습니다. 여기서 확인은 CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);이라는 어설션을 통해 구현됩니다. 표현 의미론에 따르면 어설션이 실패하는 이유는 좌표가 "i>=size" 범위를 벗어났기 때문입니다.

    xpos iypos j - 1의 값 범위를 확인해주세요. 참고: 확인 시 unsigned 변환으로 인해 0보다 작은 값은 더 큰 값이 됩니다.

    회신하다
    0
  • 취소회신하다