`

一个个传入图片并统计像素点

 
阅读更多
//从文件夹中一张张传入图片,统计每张图片中白色像素点占比。累加和除以图片个数,算出平均值
#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动态的打开图片并测试图片上点的像素和坐标

    在VC++编程环境中,动态打开图片并测试图片上点的像素和坐标是一项常见的图像处理任务。这个程序的核心功能包括两部分:一是加载指定的位图文件,二是对位图进行像素级别的操作,如获取和修改特定坐标的像素值。 ...

    Js之canvas获取图片主色调,近似色,互补色,以及根据图片颜色获取主题配色方案详解、插件

    这个方法返回一个`ImageData`对象,包含了图像每一个像素的颜色信息。每个像素由四个值表示:红、绿、蓝和透明度(RGBA)。 获取主色调的策略通常是统计所有像素的RGB值,然后找出出现频率最高的颜色。可以使用一个...

    使用ShellExecuteEx调用控制台程序(exe)并传入多个参数

    以下是一个使用`ShellExecuteEx`调用控制台程序并传入参数的C++示例: ```c++ SHELLEXECUTEINFO sei = {0}; sei.cbSize = sizeof(SHELLEXECUTEINFO); sei.fMask = SEE_MASK_NOCLOSEPROCESS; // 保留进程句柄以便...

    File 类:对用户由命令行参数传入的一个名称进行判断

    编写一个程序,对用户由命令行参数传入的一个名称进行判断。如果是一个文件名,则输出该文件相关属性 ( 文件名、路径、绝对路径、是否可读、是否可写和文件的长度等 ) 。如果是一个目录,则输出该目录下的文件及子...

    页面实现多个图片轮播功能demo

    2. 数据结构:为了管理多个图片轮播,可以创建一个数组存储每个轮播实例的信息,包括图片数组、当前显示的索引等。 3. 函数封装:定义一个通用的轮播函数,接收必要的参数,如轮播元素、图片数据、切换时间和方向等...

    opengl实例读入图片并显示

    1. 加载图像:使用SOIL库的SOIL_load_image函数,传入图片文件路径,返回一个包含图像数据的内存缓冲区。 2. 创建纹理对象:使用glGenTextures生成一个或多个纹理ID。 3. 绑定纹理:通过调用glBindTexture将纹理ID...

    php图片最宽600像素.rar_php 图片_php图片最宽600像素_php缩略图

    此外,为了保持图片质量,还可以调整`imagejpeg()`函数的第二个参数,传入一个质量值(0-100,数值越大质量越高,但文件也越大)。 总之,通过PHP和GD库,我们可以轻松地将图片宽度限制在600像素以内,同时保持图片...

    Qt QListWidget传入多张图片

    Qt QListWidget传入多张图片,...但是需要我们对数据建模有一定的了解,而QListWidget是一个升级版本的QListView,它已经为我们建立了一个数据存储模型QListWidgetItem,操作方便,直接调用addItem即可添加Item项。

    打开图片并显示图片灰度值

    在彩色图像中,每个像素通常由红、绿、蓝(RGB)三种颜色组成,每种颜色都有一个强度值,形成一个像素的色彩。而灰度图像,顾名思义,是只有一个亮度级别的图像,没有颜色信息。它将每个像素的RGB值转换为单一的灰度...

    基于 vue 编写的vue图片预览组件,支持单图和多图预览,仅传入一个图片地址,即可实现图片预览效果,可自定义背景、按钮颜色等

    本组件是一个基于 vue 编写的vue图片预览组件,支持单图和多图预览,仅传入一个图片地址,即可实现图片预览效果,比较适合给文章及页面的所有图片添加预览效果,预览背景色,关闭按钮颜色,控制条的背景也和字体颜色...

    python实现图片上添加图片

    该函数需要传入一个路径参数path,表示图片文件保存的位置。创建后返回一个Image对象。 - open(path): 打开一个已存在的图片文件。这个函数也需要一个路径参数path,用于指定要打开的图片文件位置。打开后同样返回...

    asp.net 将彩色图片转换为灰度图片

    3. 遍历像素并转换:现在,我们遍历原图片的每一个像素,根据RGB值计算出灰度值,并设置到新图片中。灰度值通常通过以下公式计算: ``` 灰度值 = 0.21R + 0.72G + 0.07B ``` 在C#代码中,这可以这样实现: ```...

    flex 两个图片播放小程序

    例如,为了实现图片的放大和缩小,可以使用BitmapData的draw方法,传入原始图像和一个缩放矩阵作为参数。 对于图片的显示,Flex中的Image组件是关键。Image组件可以加载网络上的图像或者内存中的BitmapData对象,并...

    Qt获取坐标(图像读取及显示,图像坐标及像素值获取及显示)

    要读取一个图像文件,我们只需创建一个`QImage`对象并传入文件路径即可: ```cpp QImage image("path_to_image.jpg"); ``` 一旦图像被加载,我们就可以使用`QLabel`来显示它。`QLabel`是Qt GUI中用于显示文本或...

    改进版腾讯jquery图片浏览代码

    2 支持了7个以上图片 并可翻页浏览 每页7个 大图的next还是下一个图片 3 自动播放支持到本页最后一个图片后自动翻页 如果到最后一页的最后一个图片 会返回第一页的第一个图片 4 支持鼠标移入大图停止自动播放 移出...

    使传入一个字符串按反序存放

    编写c语言小程序,使传入一个字符串按反序存放,在主函数中输入和输出字符串。

    C#利用GDAL库读取geotiff图片的像素比例

    在本篇内容中,我们将详细探讨如何利用C#结合GDAL库读取geotiff图片的像素比例,并获取实际场景中的坐标位置。 首先,要使用GDAL库在C#项目中,你需要安装一个名为OSGeo4W的软件包,它包含了GDAL的.NET绑定。安装...

    根据url和左上右下两点坐标裁剪图片并返回base64格式字符串

    根据url和图片左上右下两点坐标裁剪图片并返回base64格式字符串,java工具类,适用于人脸识别

    自动识别上传图片中的主要颜色

    颜色识别的基本原理是遍历图片的每一个像素,分析其RGB(红绿蓝)值。通常,我们会将这些值归一化,然后进行统计分析,找出出现频率最高的颜色。RGB值的范围通常是0到255,每种颜色有8位表示,组合起来就是24位真...

    Kettle循环遍历结果集作为参数传入转换.zip

    为了将这些变量传递到下一个转换,我们可以使用"Transformation Executor"步骤。在此步骤中,你可以指定接收变量的转换,并映射输入变量到目标转换的参数。这样,每次循环时,当前行的数据就会作为参数传递给下一个...

Global site tag (gtag.js) - Google Analytics