C++ OpenCV中灰度图像像素值的获取
我只是想弄清楚我的概念——访问cv::Mat的所有矩阵元素意味着我实际上正在访问图像的所有像素值(灰度-1通道,颜色-3通道)?假设我用于打印灰度矩阵值(加载了一个通道图像并键入CV_32FC1)的代码如下所示,那么这是否意味着我只访问CV::mat的成员,或者我也访问图像的像素值(带有一个通道-灰度并键入CV_32FC1)C++ OpenCV中灰度图像像素值的获取,c++,opencv,image-processing,C++,Opencv,Image Processing,我只是想弄清楚我的概念——访问cv::Mat的所有矩阵元素意味着我实际上正在访问图像的所有像素值(灰度-1通道,颜色-3通道)?假设我用于打印灰度矩阵值(加载了一个通道图像并键入CV_32FC1)的代码如下所示,那么这是否意味着我只访问CV::mat的成员,或者我也访问图像的像素值(带有一个通道-灰度并键入CV_32FC1) cv::Mat img=cv::imread(“lenna.png”); 对于(int j=0;j您正在访问矩阵的元素,同时也在访问图像本身。在代码中,执行此操作后: c
cv::Mat img=cv::imread(“lenna.png”);
对于(int j=0;j您正在访问矩阵的元素,同时也在访问图像本身。在代码中,执行此操作后:
cv::Mat img = cv::imread("lenna.png");
矩阵img表示图像lenna.png。(如果成功打开)
为什么不通过更改一些像素值来进行试验:
cv::Mat img = cv::imread("lenna.png");
//Before changing
cv::imshow("Before",img);
//change some pixel value
for(int j=0;j<img.rows;j++)
{
for (int i=0;i<img.cols;i++)
{
if( i== j)
img.at<uchar>(j,i) = 255; //white
}
}
//After changing
cv::imshow("After",img);
cv::Mat img=cv::imread(“lenna.png”);
//更换前
cv::imshow(“之前”,img);
//改变一些像素值
对于(int j=0;j为了获得灰度图像的像素值(介于0和255之间的整数),还需要键入答案
int pixelValue = (int)img.at<uchar>(i,j);
int像素值=(int)img.at(i,j);
cv::Mat的值代表像素值。因此,你是对的。应该是:img.at(j,i)=255;//white
(行/列错误)@Barshan Das你能详细说明你的观点吗“但在单通道灰度图像的情况下,它是cv_8UC1而不是cv_32FC1”。这意味着什么?@user227666:我想说,对于单通道灰度图像,每个像素值是8位无符号字符,而不是32位无符号浮点。给像素赋值是在CLion中给我SIGABRT。
int pixelValue = (int)img.at<uchar>(i,j);