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

异常在下面代码中标出了。不用看其他参数,直接第一个//hist开始看即可。异常是什么意思?


at()函数的定义是

template<typename _Tp> inline
_Tp& Mat::at(int i0, int i1)
{
    CV_DbgAssert(dims <= 2);
    CV_DbgAssert(data);
    CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]);
    CV_DbgAssert((unsigned)(i1 * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels()));   //这行出现异常
    CV_DbgAssert(CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());
    return ((_Tp*)(data + step.p[0] * i0))[i1];
}



*******************************
  源代码

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

void histogram2Dcalculation(const Mat &src, Mat &histo2D)
{
    Mat hsv;

    cvtColor(src, hsv, CV_BGR2HSV);

    int hbins = 255, sbins = 255;
    int histSize[] = { hbins,sbins };

    float hranges[] = { 0,180 };
    float sranges[] = { 0,256 };
    const float* ranges[] = { hranges,sranges };

    MatND hist, hist2;   //hist
    int channels[] = { 0,1 };
    calcHist(&hsv, 1, channels, Mat(), hist, 1, histSize, ranges, true, false);                   //hist
    double maxVal = 0;
    minMaxLoc(hist, 0, &maxVal, 0, 0);    //hist

    int scale = 1;
    Mat histImg = Mat::zeros(sbins*scale, hbins*scale, CV_8UC3);

    for (int h = 0;h < hbins;h++)
        for (int s = 0;s < sbins;s++)
        {
            float binVal = hist.at<float>(h, s);   //异常的地方,hist
            int intensity = cvRound(binVal * 255 / maxVal);
            rectangle(histImg, Point(h*scale, s*scale), Point((h + 1)*scale - 1, (s + 11)*scale - 1),
                Scalar::all(intensity), CV_FILLED);
        }
    histo2D = histImg;
}

int main()
{
    Mat src, imageq;
    Mat histImg, histImgeq;
    Mat histHSory, histHSeq;

    src = imread("d:/lena.jpg");
    if (!src.data) 
    {
        printf("Error imagen \n");exit(1);
    }

    Mat bgr_planes[3];
    split(src, bgr_planes);

    histogram2Dcalculation(src, histImg);
    imshow("H-S Histogram", histImg);



    waitKey();

}


阅读 2.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题