//从文件夹中一张张传入图片,统计每张图片中白色像素点占比。累加和除以图片个数,算出平均值 #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; }
相关推荐
在VC++编程环境中,动态打开图片并测试图片上点的像素和坐标是一项常见的图像处理任务。这个程序的核心功能包括两部分:一是加载指定的位图文件,二是对位图进行像素级别的操作,如获取和修改特定坐标的像素值。 ...
这个方法返回一个`ImageData`对象,包含了图像每一个像素的颜色信息。每个像素由四个值表示:红、绿、蓝和透明度(RGBA)。 获取主色调的策略通常是统计所有像素的RGB值,然后找出出现频率最高的颜色。可以使用一个...
以下是一个使用`ShellExecuteEx`调用控制台程序并传入参数的C++示例: ```c++ SHELLEXECUTEINFO sei = {0}; sei.cbSize = sizeof(SHELLEXECUTEINFO); sei.fMask = SEE_MASK_NOCLOSEPROCESS; // 保留进程句柄以便...
编写一个程序,对用户由命令行参数传入的一个名称进行判断。如果是一个文件名,则输出该文件相关属性 ( 文件名、路径、绝对路径、是否可读、是否可写和文件的长度等 ) 。如果是一个目录,则输出该目录下的文件及子...
2. 数据结构:为了管理多个图片轮播,可以创建一个数组存储每个轮播实例的信息,包括图片数组、当前显示的索引等。 3. 函数封装:定义一个通用的轮播函数,接收必要的参数,如轮播元素、图片数据、切换时间和方向等...
要读取一个图像文件,我们只需创建一个`QImage`对象并传入文件路径即可: ```cpp QImage image("path_to_image.jpg"); ``` 一旦图像被加载,我们就可以使用`QLabel`来显示它。`QLabel`是Qt GUI中用于显示文本或...
1. 加载图像:使用SOIL库的SOIL_load_image函数,传入图片文件路径,返回一个包含图像数据的内存缓冲区。 2. 创建纹理对象:使用glGenTextures生成一个或多个纹理ID。 3. 绑定纹理:通过调用glBindTexture将纹理ID...
此外,为了保持图片质量,还可以调整`imagejpeg()`函数的第二个参数,传入一个质量值(0-100,数值越大质量越高,但文件也越大)。 总之,通过PHP和GD库,我们可以轻松地将图片宽度限制在600像素以内,同时保持图片...
Qt QListWidget传入多张图片,...但是需要我们对数据建模有一定的了解,而QListWidget是一个升级版本的QListView,它已经为我们建立了一个数据存储模型QListWidgetItem,操作方便,直接调用addItem即可添加Item项。
在彩色图像中,每个像素通常由红、绿、蓝(RGB)三种颜色组成,每种颜色都有一个强度值,形成一个像素的色彩。而灰度图像,顾名思义,是只有一个亮度级别的图像,没有颜色信息。它将每个像素的RGB值转换为单一的灰度...
本组件是一个基于 vue 编写的vue图片预览组件,支持单图和多图预览,仅传入一个图片地址,即可实现图片预览效果,比较适合给文章及页面的所有图片添加预览效果,预览背景色,关闭按钮颜色,控制条的背景也和字体颜色...
该函数需要传入一个路径参数path,表示图片文件保存的位置。创建后返回一个Image对象。 - open(path): 打开一个已存在的图片文件。这个函数也需要一个路径参数path,用于指定要打开的图片文件位置。打开后同样返回...
3. 遍历像素并转换:现在,我们遍历原图片的每一个像素,根据RGB值计算出灰度值,并设置到新图片中。灰度值通常通过以下公式计算: ``` 灰度值 = 0.21R + 0.72G + 0.07B ``` 在C#代码中,这可以这样实现: ```...
2 支持了7个以上图片 并可翻页浏览 每页7个 大图的next还是下一个图片 3 自动播放支持到本页最后一个图片后自动翻页 如果到最后一页的最后一个图片 会返回第一页的第一个图片 4 支持鼠标移入大图停止自动播放 移出...
编写c语言小程序,使传入一个字符串按反序存放,在主函数中输入和输出字符串。
根据url和图片左上右下两点坐标裁剪图片并返回base64格式字符串,java工具类,适用于人脸识别
颜色识别的基本原理是遍历图片的每一个像素,分析其RGB(红绿蓝)值。通常,我们会将这些值归一化,然后进行统计分析,找出出现频率最高的颜色。RGB值的范围通常是0到255,每种颜色有8位表示,组合起来就是24位真...
4. 修改颜色值:遍历`ImageData.data`数组,这是一个一维数组,每四个元素代表一个像素的RGB(A)值。根据颜色模型进行修改。 5. 更新像素:使用`putImageData()`将修改后的`ImageData`对象放回Canvas。 在这个过程中...
在本篇内容中,我们将详细探讨如何利用C#结合GDAL库读取geotiff图片的像素比例,并获取实际场景中的坐标位置。 首先,要使用GDAL库在C#项目中,你需要安装一个名为OSGeo4W的软件包,它包含了GDAL的.NET绑定。安装...
这个压缩包提供的资源名为"ios-动态画曲线,传入一个数组,一个初始点,x轴间距和y轴间距。就可以直接画曲线了。.zip",其中包含了一个叫做"TextQuXianView"的文件,我们可以推测这可能是一个自定义的UIView子类,...