#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/core.hpp"
#include <opencv\ml.h>
#include <iostream>
#include "cv.h"
#include "highgui.h"
#include <vector>
#include <math.h>
#include <string.h>
#include <fstream>
using namespace std;
using namespace cv;
//统计一幅图片中白色像素点和黑色像素点占整幅图的比例
int bSums(Mat src)
{
int counter = 0;
int black = 0;
int n = 0;
//迭代器访问像素点
Mat_<uchar>::iterator it = src.begin<uchar>();
Mat_<uchar>::iterator itend = src.end<uchar>();
for (; it != itend; ++it)
{
n++;
if ((*it) > 0)
{
counter += 1;//二值化后,像素点是0或者255
}
else {
black += 1;
}
}
double biliB = counter*1.0/n*1.0*100*1.0;
double biliH = black*1.0/n*1.0*100*1.0;
cout << "counter:" << counter << endl;
cout << "black:" << black << endl;
cout << "n:" << n << endl;
cout << "biliB:" << biliB << endl;
cout << "biliH:" << biliH << endl;
return counter;
}
int main(int agrc,char** agrv)
{
Mat imgPath = imread("D://XR//811416.jpg");//读取源图
//namedWindow("原图", 0);
//resizeWindow("原图", 500, 500);
imshow("原图", imgPath);
Mat a1;
cvtColor(imgPath, a1, COLOR_BGR2GRAY);//转灰度图
//namedWindow("灰度", 0);
//resizeWindow("灰度", 500, 500);
imshow("灰度", a1);
Mat a2;
threshold(a1, a2, 0, 255, THRESH_BINARY | THRESH_OTSU);//二值化
//namedWindow("灰度", 0);
//resizeWindow("灰度", 500, 500);
imshow("灰度", a2);
int a = bSums(a2);//调用函数bSums
imshow("A", a2);
//cout << "A:" << a;
waitKey();
return 0;
}