访问指向像素openCV的指针时出现断言错误

时间:2015-01-20 11:23:22

标签: c++ pointers opencv image-processing

所以我很难理解为什么我在访问图像的下一个col /行中的指针时从opencv得到这个断言错误。让我告诉你发生了什么,并提供一些代码。

  • 我从图片中获取了投资回报率,这是一个cv::Mat或一个较大cv::Mat部分的标题。
  • 我构建了一些指针来访问我的ROI值。因此,假设我的ROI填充了像素值,并且是3x3 Mat

        with the following Dimensions (index starting at 0,0)
        ---------
        | 1 | 2 | 3 |
        | 4 | 5 | 6 |
        | 7 | 8 | 9 |
    
  • 首先,我需要初始化指针,分别指向他们的位置。我通过ptr获取了cv::Mat的{​​{1}}函数及其在网格中的位置。

面临的问题:

当我尝试访问下一个邻居的像素时,我收到一个断言错误。

我的诊断:

  • 我认为它可能是范围,但我确保根据我的尺寸定义for循环条件不会是这种情况。
  • 我尝试访问的项目不存在,但是当我通过ROI时我是如何理解的,我已经在新的Matrix中获得了值,并且我应该能够访问所需像素周围的所有值。

该守则的一部分:

cv::Point
运行时

ASSERTION FAILED:OpenCV错误:断言失败(y == 0 ||< data&& dims> = 1&&(unsigned)y<(unsigned)size.p [ 0]))在cv :: Mat :: ptr中,文件// ...表示头文件mat.hpp的路径//第428行

我无法指出这个问题,请你帮忙。在使用指针和像素时,请给我一些知识,以防我误解了某些内容。

谢谢

2 个答案:

答案 0 :(得分:0)

试试这个

    for(int j = 1; j < ROI.rows  ; j++){

        auto current = ROI.ptr<uchar>(maxCoord.y);
        auto neighbor_down = ROI.ptr<uchar>(maxCoord.y+1); //THE PROB IS HERE according to debugging
        auto neighbor_up = ROI.ptr<uchar>(maxCoord.y-1);

        cv::Point poi ; //point of interest

         cv::Point bordess(Point(0,0));
        for(int i= 0; i < ROI.cols; i++){


            switch(maxCoord.x){ //PROOF FOR LOGIC
                case 0:
                    if(maxCoord.y == 0){ //another switch statement maybe ??

                        diff1 = std::abs(current[maxCoord.x+1] - current[maxCoord.x]);
                        diff2 = std::abs(neighbor_down[maxCoord.x] - current[maxCoord.x]);

                        if(diff2 > diff1){

                            cv::Point(maxCoord.x,maxCoord.y+1) = poi & bordess;

                        } else {

                            cv::Point(maxCoord.x+1,maxCoord.y) = poi & bordess;

                        }

                    };

答案 1 :(得分:0)

好的,基本上我发现由于输入图像的性质,我的指针定义是错误的。我已经对图像进行了一些预处理,并且内部值的范围从uchar更改为其他值。当我将auto neighbor_down = ROI.ptr<uchar>(maxCoord.y+1);更改为auto neighbor_down = ROI.ptr<float>(maxCoord.y+1);时,一切正常。