我有一个小问题,但我不知道如何解决它。我只想做一个Mat的简单“foreach”来查看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行×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**
任何人都可以帮助我吗? 感谢。
答案 0 :(得分:0)
以下代码将帮助您访问rgb像素值。您必须访问三个通道才能查看RGB值。
getenv
从灰度图像中读取像素值
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 ;
}
}
<强>更新强> 此代码从图像中读取所有灰度值,并导致频繁出现的值(值发生的次数)。即
像素值&#39; 0&#39;如图所示,
像素值&#39; 1&#39;看来,...&amp;所以一直到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;
}
}
cv::imshow("After",img);
waitKey(0);
}