【问题标题】:Count pixels of a black and white image (OpenCV / C++ )计算黑白图像的像素(OpenCV / C++)
【发布时间】:2015-02-16 21:08:26
【问题描述】:

我是 opencv / C ++ 的初学者,希望您能帮助解决一个看似简单的问题。例如,我有这张图片:

...并且会忽略背景,它永远是白色的,图像永远是黑白的,只剩下云可以计算三件事:

  1. 图形的像素数(仅云,不考虑背景)。
  2. 白色像素的数量。 (仅限云)
  3. 黑色像素的数量。 (仅限云)

我知道要达到 2,用它减去 3。

谢谢!

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    这是一个非常简单的方法

    • 计算黑色像素 (3)
    • 从任何角落开始用黑色填充填充
    • 计算剩余白色像素的数量 (2)
    • 将结果 (2) 和 (3) 相加得到 (1)

    【讨论】:

      【解决方案2】:

      首先,您可以使用cv::countNonZero(img) 来计算非黑色像素。因此您可以使用(img.rows * img.cols) - cv::countNonZero(img) 来计算黑色像素。

      现在,尝试以下操作:首先,计算黑色像素。然后尝试使用形态开口去除云内的那些白色斑点。之后,再次计算黑色像素。现在,您可以从第二个计数中减去第一个计数,您将获得这些斑点内的白色像素数量。

      但是,这种方法并不准确,因为形态开口也会稍微改变外部的云。另一种方法是使用其他答案中建议的方法,使用泛光填充将周围的白色像素填充为黑色。

      顺便说一句,形态开场是这样的:

      cv::Mat element = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(2 * openingRadius + 1, 2 * openingRadius + 1));
      cv::morphologyEx(mat, mat, cv::MORPH_OPEN, element);
      

      或者,使用 cuda:

      cv::Mat element = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(2 * openingRadius + 1, 2 * openingRadius + 1));
      cv::cuda::createMorphologyFilter(cv::MORPH_OPEN, CV_8UC1, element)->apply(gpuMat, gpuMat);
      

      【讨论】:

        【解决方案3】:

        您可以使用此代码来计算图像中的黑色像素。应用相同的逻辑来计算白色像素。

        #include<opencv2/opencv.hpp>
        #include<opencv2/highgui/highgui.hpp>
        
        using namespace std;
        using namespace cv;
        
        int main()
        {
        
        Mat img = imread("/home/jordan/opencv/Test/edge_detection/img2.bmp",0);
        cout<<"cols= "<<img.cols<<"row= "<<img.rows<<"\n";
        int i,j,count=0;
        for(i=0;i<img.cols;i++)
        {
        for(j=0;j<img.rows;j++)
        {
        int k=img.at<uchar>(j,i);
        if(k==0)
        {  
        count++;
        cout<<"col="<<i<<"row="<<j<<"k= "<< k<<"\t\n";
        }
        }
        } 
        cout<<"count="<<count<<"\n";
        }
        

        【讨论】:

        • 我认为使用(img.rows * img.cols) - cv::countNonZero(img)计算黑色像素更容易
        猜你喜欢
        • 2013-10-10
        • 2015-02-13
        • 2012-04-27
        • 2012-01-15
        • 2018-11-21
        • 1970-01-01
        • 2011-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多