opencv统计二值图黑白像素个数

Posted 一样菜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv统计二值图黑白像素个数相关的知识,希望对你有一定的参考价值。

#include "iostream"
#include "queue"
#include "Windows.h"

#include <opencv2/ml/ml.hpp>
#include "opencv2/opencv.hpp"
#include "Windows.h"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/calib3d/calib3d.hpp" 
#include "opencv2/ml.hpp"
#include "opencv/cv.h"
#include "opencv/ml.h"
#include "opencv/highgui.h"
#include "opencv/cvaux.h"
#include "opencv/cvwimage.h"
#include "opencv/cxcore.h"
#include "opencv/cxmisc.h"
#include "opencv2/cvconfig.h"
#define MAX 30

using namespace cv;
using namespace std;
int color[10000];


int main(int argc, char *argv[]) {
    cv::Mat frame;
    cv::Mat back;
    cv::Mat fore;
    //cv::VideoCapture cap("C:\\C_C++ EX8 code\\Video\\MyVideo.wmv");
    cv::VideoCapture cap(0);
    cv::Ptr<BackgroundSubtractorMOG2> bg = createBackgroundSubtractorMOG2();

    bg->setNMixtures(3);
    //bg.bShadowDetection = false;
    std::vector<std::vector<cv::Point> > contours;

    cv::namedWindow("Frame");
    cv::namedWindow("Background");

    while(1)
    {
        cap >> frame;
        //bg.operator()(frame, fore);
        bg->apply(frame, fore,0.01);
        
        cv::erode(fore, fore, cv::Mat());
        cv::dilate(fore, fore, cv::Mat());
        bg->getBackgroundImage(back);
        //cv::findContours(fore, contours, CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
        //cv::drawContours(frame, contours, -1, cv::Scalar(0, 0, 255), 2);
        threshold(fore, fore, 20, 250, CV_THRESH_BINARY_INV);
        //---------------------------------------------------------------
        int nRow = fore.rows;
        int nCol = fore.cols;
        //imshow("img", binaryimg);
        memset(color, 0, sizeof(color));
        for (int i = 0; i < nRow; i++)
        {
            uchar *data = fore.ptr<uchar>(i);
            for (int j = 0; j < nCol; j++)
            {
                if (*data == 0)
                    color[j]++;
                *data++;
            }
        }

        int high = 300;
        Mat histimg(high, nCol, CV_8UC3);
        for (int j = 0; j < nCol; j += 2)
        {
            line(histimg, Point(j, high - color[j]), Point(j, high), Scalar(0, 0, 250), 1);
        }
        imshow("Hist", histimg);
        //---------------------------------------------------------------
            
        //---------------------------------------------------------------
        cv::imshow("Foreground", fore);
        cv::imshow("Frame", frame);
        cv::imshow("Background", back);
        if (cv::waitKey(40) >= 0)
            break;
    }
    return 0;
}

 

以上是关于opencv统计二值图黑白像素个数的主要内容,如果未能解决你的问题,请参考以下文章

使用python-opencv 统计二值图像中白色像素点的个数(表示面积)

《opencv学习》 之 二值化

自己写的二值图的轮廓图算法

OpenCV技巧 | 二值图孔洞填充方法与实现(附源码)

OpenCV二值图求最大连通区域算法(广度优先算法 BFS)

图像灰度化、二值化理解