//从文件夹中一张张传入图片,统计每张图片中白色像素点占比。累加和除以图片个数,算出平均值 #include <stdio.h> #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; char filename[1000]; char windowname[1000]; int n = 0;//n是所有像素点 int counter = 0;//白色像素点 //计算一张图片的像素点 int bSums(Mat src) { int black = 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 biliB; } int main(int argc, char *argv[]) { double sum = 0; double sumB = 0; int i; //循环传入图片 for (i = 1; i <= 999; i++) { //文件夹中照片的名字必须从1开始 sprintf_s(filename, "D://OK//%d.jpg", i); //sprintf(windowname, "window%d.jpg", i); Mat pScr = imread(filename, 1); //cvNamedWindow(windowname, CV_WINDOW_AUTOSIZE); //cvShowImage(windowname, pScr); Mat a1; cvtColor(pScr, a1, COLOR_BGR2GRAY);//转灰度图 Mat a2; threshold(a1, a2, 0, 255, THRESH_BINARY | THRESH_OTSU);//二值化 double B = bSums(a2);//调用函数bSums计算每张图片的白色像素点百分比 sumB += counter; sum += B;//累加所有图片的白色像素点百分比 } double per = sum * 1.0/ i *1.0;//除以图片个数,算出所有图片白色像素点百分比的平均值 cout << "i: " << i << endl; cout << "sum: " << sum << endl; cout << "sumB: " << sumB << endl; cout << "per: " << per << endl; waitKey(); system("pause"); return 0; }
相关推荐
可以使用一个对象来存储每种颜色的计数,遍历所有像素并更新计数。最后,找出计数最多的颜色,这就是主色调。 近似色的获取可以基于颜色空间的距离。最常用的是欧氏距离,计算两种颜色在RGB空间中的距离。通过设定...
灰度图像的每个像素只有一个颜色通道,其亮度反映了原图像对应像素的综合亮度。转换过程通常涉及到RGB(红绿蓝)颜色空间到灰度的转换。一个常见的方法是使用加权平均法: `灰度值 = 0.299 * R + 0.587 * G + 0.114...
- 针对人脸关键点检测,需要训练一个分类器(如SVM)以识别特定的LBF特征与对应的关键点位置。 4. **训练模型**: - 收集大量标注了关键点的人脸图像数据集,例如AFW、Helen或300W等。 - 使用这些数据训练一个...
在滤波过程中,图像中的每个像素点被其周围邻域内像素值的中位数所替换。这个邻域通常是一个方形或圆形的窗口,称为滤波器或模板。这种方法可以保留边缘细节,同时去除噪声,因为噪声通常表现为极端值,而中值则相对...
但是,字符串`"\0"`并不被视为一个有效的字符常量,因为`\0`通常用来表示字符串结束的标志。 ### 18. 文件的反向选择 - **知识点概述**:文件操作中反向选择的概念。 - **详细解释**:在操作系统中,反向选择是指...
Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与用户交互的组件 SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。...
Access数据库中包含了多种对象,如表、窗体、报表等,但“记录”并不是一个独立的数据库对象。 **详细解释:** - **Access数据库对象**:Access数据库主要包括表、查询、窗体、报表、宏和模块等对象。 - **记录的...