断言 opencv mat.inl.hpp 行 930 失败

Fail assertion opencv mat.inl.hpp line 930

我有一个小问题,但我不知道如何解决。我只想做一个简单的 "foreach" Mat 来查看 rgb 值。我有下一个代码:

for(int i=0; i<mat.rows; i++)
{
    for(int j=0; j<mat.cols; j++)
    {
        int value_rgb = mat.at<uchar>(i,j);
        cout << "(" << i << "," << j << ") : " << value_rgb <<endl;
    }
}

垫子是 200 行 x 200 列。当我在控制台上打印结果时,就在最后,程序失败并出现下一个错误:

**OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 <(unsigned)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 1 5) == elemSize1()) in unknown function, file c:\opencv\build\include\opencv2\core\mat.hpp, line 537**

谁能帮帮我? 谢谢

下面的代码将帮助您访问 rgb 像素values.You必须访问三个通道才能查看 RGB 值。

for(int i = 0; i < i<mat.rows; i++)
    {
        for(int j = 0; j < mat.cols; j++)
        {
            int b = mat.at<cv::Vec3b>(i,j)[0];
            int g = mat.at<cv::Vec3b>(i,j)[1];
            int r = mat.at<cv::Vec3b>(i,j)[2];
            cout << r << " " << g << " " << b << value_rgb <<endl ;
        }
    }

从灰度图像中读取像素值

#include <opencv\cv.h>
#include <highgui\highgui.hpp>
using namespace std;
using namespace cv;
    int main()
{
cv::Mat img = cv::imread("5.jpg",0);

for(int j=0;j<img.rows;j++) 
{
  for (int i=0;i<img.cols;i++)
  {
    int a;
    a=img.at<uchar>(j,i);
     cout<<a<<endl; 
  }
}

cv::imshow("After",img);
waitKey(0);
}

已更新 此代码从图像中读取所有灰度值并导致频繁出现的值(出现值的次数)。即

像素值“0”出现的次数,

像素值“1”出现的次数,...等直到 256。

#include <opencv\cv.h>
#include <highgui\highgui.hpp>
using namespace std;
using namespace cv;
    int main()
{
cv::Mat img = cv::imread("5.jpg",0);

//for(int j=0;j<img.rows;j++) 
//{
//  for (int i=0;i<img.cols;i++)
//  {
//    int a;
//  a=img.at<uchar>(j,i);
//     cout<<a<<endl; 
//  }
//}
vector<int> values_rgb;
for(int i=0; i<20; i++)
{
    for(int j=0; j<20; j++)
    {
        int value_rgb = img.at<uchar>(i,j);
        values_rgb.push_back(value_rgb);
        //cout << "(" << i << "," << j << ") : " << value_rgb <<endl;
    }
}
// Sorting of values in ascending order 
vector<int> counter_rg_values;
for(int l=0; l<256; l++)

{
    for(int k=0; k<values_rgb.size(); k++)
    {
        if(values_rgb.at(k) == l)
        {
            counter_rg_values.push_back(l);
        }
    }
}
//for(int m=0;m<counter_rg_values.size();m++)
//cout<<m<<" "<< counter_rg_values[m] <<endl;
int m=0;
for(int n=0;n<256;n++)
{
    int c=0;
    for(int q=0;q<counter_rg_values.size();q++)
    {
        if(n==counter_rg_values[q])
        {
            //int c;
        c++;
        m++;
        }
    }

    cout<<n<<"= "<< c<<endl;
}
cout<<"Total number of elements "<< m<<endl;

cv::imshow("After",img);
waitKey(0);
}