gpt4 book ai didi

c++ - 在OpenCV中访问灰度图像的像素值

转载 作者:可可西里 更新时间:2023-11-01 14:53:10 29 4
gpt4 key购买 nike

我只是想弄清楚我的概念——访问 cv::Mat 的所有矩阵元素意味着我实际上正在访问图像的所有像素值(灰度 - 1 个 channel 和颜色 - 3 个 channel )?假设我的打印灰度矩阵值的代码是加载了 1 个 channel 图像并输入 CV_32FC1,如下所示,那么这是否意味着我只访问 cv::mat 的成员或者我正在访问图像的像素值(具有 1 个 channel - 灰度和类型 CV_32FC1)?

    cv::Mat img = cv::imread("lenna.png");
for(int j=0;j<img.rows;j++)
{
for (int i=0;i<img.cols;i++)
{
std::cout << "Matrix of image loaded is: " << img.at<uchar>(i,j);
}
}

我对使用 OpenCV 进行图像处理还很陌生,想弄清楚我的想法。如果我错了,那么我如何访问图像的每个像素值?

最佳答案

您正在访问矩阵的元素,同时您也在访问图像本身。在您的代码中,执行此操作后:

 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);

注意:这只会更改 volatile 内存中的图像值,即当前加载 mat img 的位置。修改 mat img 的值,不会更改存储在磁盘中的实际图像“lenna.png”中的值(除非您执行 imwrite)

但对于单 channel 灰度图像,它是 CV_8UC1 而不是 CV_32FC1

关于c++ - 在OpenCV中访问灰度图像的像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17919399/

29 4 0
文章推荐: Java Spark 溢出内存映射 OutOfMemoryError 错误
文章推荐: javascript - 将 contenteditable 和覆盖换行符设置为
而不是
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com