如何遍历所有图像像素然后取灰度值,1通道进行分析?

Posted

技术标签:

【中文标题】如何遍历所有图像像素然后取灰度值,1通道进行分析?【英文标题】:How to loop through all image pixels then take gray scale value, 1 channel for analysis? 【发布时间】:2018-03-13 00:39:11 【问题描述】:

我基本上想遍历灰度图像,获取单通道 (CV_8UC1) 值并对每个值进行分析,最终得到如下结果:

if (pixel.intensityVal >= 100 && pixel.intensityVal <= 150)  

    bitStream.add("1")

else if (pixel.intensityVal >= 175 && pixel.intensityVal <= 190) 

    bitStream.add("0")

else 

    bitStream.add("X")

然后最终将“bitStream”打印出来进行验证。

我是 OpenCV 和 C++ 的新手,但这似乎可行,我只是不确定最有效的方法。

任何建议将不胜感激!

【问题讨论】:

您的第二个if 语句似乎不正确 - 如果强度小于或等于 175,则必然小于 190。 最有效的方法可能是创建一个包含 51 个 1、16 个 0 和其余作为 X 的 255 元素数组,并调用 OpenCV 的 LUT() 函数。 啊,是的,那个 if 语句是一个错字。感谢您指出了这一点。我将研究 LUT() 函数。 【参考方案1】:

我首先考虑到你已经有了你的灰度图,否则你可以使用cvtColor( image, gray_image, CV_BGR2GRAY );转换或者直接灰度上传(见下文)。

您的图像存储在cv::Mat 变量中,该变量是一个包含每个像素值的矩阵。因此,可以通过读取每个单元格来访问强度级别。为此,您可以使用运算符.at&lt;type&gt;(x,y)

cv::Mat img = cv::imread("lenna.png", IMREAD_GRAYSCALE);
for(int i=0; i<img.rows; i++)
    for(int j=0; j<img.cols; j++)
         pixel.IntensityVal = img.at<cv::CV_8UC>(i,j);
         if (pixel.intensityVal >= 100 && pixel.intensityVal <= 150)  
            bitStream.add("1")
         
         else if (pixel.intensityVal <= 175 && pixel.intensityVal <= 190) 
           bitStream.add("0")
         
         else 
            bitStream.add("X")
         

        

有使用指针访问矩阵的最佳方法,但这不是问题的范围。

【讨论】:

完美!现在,如果我想将图像拆分为 32x32 网格,其中 (0,0) 是图像的左上角“框”,我将如何使用您的算法单独遍历每个框?例如:框 (0,0) 使用像素强度值条件进行测试,然后框 (0,1)...(n,m) 您应该先提出自己的解决方案,然后我们可以讨论改进。 所以根据我问的另一个问题,我被告知用这样的东西循环图像: int operator()(int y, int x) const int j = y * 32;整数 i = x * 32;自动 gridBlock = cv::Rect(i, j, 32, 32); int grayVal = gridBlock(i, j, CV_8UC1); int num_over_threshold = cv::countNonZero(buff);返回 num_over_threshold > count_threshold ? 255:0;但这是用于阈值处理,我需要取单通道灰度值。 我无法在主帖中更新我的完整代码,如果难以阅读,请见谅。 你应该可以编辑你的第一个问题并添加这部分代码

以上是关于如何遍历所有图像像素然后取灰度值,1通道进行分析?的主要内容,如果未能解决你的问题,请参考以下文章

matlab图像转灰度图像

彩色图像转为灰度图像

用opencv如何提取像素点的RGB分量

opencv 怎么取到灰度图像的像素值,C++接口的

Python|加权平均法读取灰度化图像介

跟我一起学opencv 第四课之图像的基本操作