利用图像HSV实现一张图片中各颜色占比

本文探讨了如何利用RGB和HSV来分析图片中各颜色占比,重点介绍了利用HSV实现的方法,展示出更好的效果。总结了从HSV角度进行颜色分类的优势。
摘要由CSDN通过智能技术生成

@[TOC](

利用图像HSV实现一张图片中各颜色占比

)
一个朋友需要得到一组照片里的颜色占比数据,在网上找了很多代码,第一次是通过RGB来实现颜色的分类,但是差异很大,第二次朋友又说可以从图像的HSV来识别吗,所以本文分别给出RGB和HSV两种识别方法。以供大家交流使用。

一、利用RGB来实现多张图片中颜色占比(效果不太好)

 #include "stdio.h"
 #include<iostream>
 #include<opencv2/opencv.hpp>
 #include<iomanip>
 #include<cmath>
 #include<string>
 using namespace std;
 using namespace cv;

 int main()
 {
   
	 const int num =157;//在D:\\test_picture\\%d.png中你要处理的图片数量
	 char fileName[50];
	 char windowName[50];
	 Mat image;
   
   float rateyellow;           //要计算的百分率
   float ratered;
   float rategrey;
   float ratewhite;
   float rateblack;
    cout << "序号" << "\t" << "黄色区域占比" << "\t" << "红色区域占比" << "\t" << "灰色区域占比""\t" << "白色区域占比""\t" << "黑色占比" << endl;
   for (int k = 1; k <= num; k++){
   
	   //sprintf读入指定路径下的图片序列
   sprintf_s(fileName, "D:\\test_picture\\%d.png", k);
   sprintf_s(windowName, "No%d", k);
	   //按照图像文件名读取
    image = imread(fileName);
	int numOfyellow = 0;
	int numOfred = 0;
	int numOfgrey = 0;
	int numOfwhite = 0;
	int numOfblack = 0;
	   for (int i = 0; i < image.rows; i++)
	   {
   
		   for (int j = 0; j <image.cols; j++)   //遍历图片的每一个像素点
		   {
   
			   if ((image.at<Vec3b>(i, j)[0] <= 120 && image.at<Vec3b>(i, j)[1] >= 170 && image.at<Vec3b>(i, j)[2] >= 230)
				   || (image.at<Vec3b>(i, j)[0]>120 && image.at<Vec3b>(i, j)[0] <= 180 && image.at<Vec3b>(i, j)[1] >= 180 &&
				   image.at<Vec3b>(i, j)[2] >= 220)){
   //对该像素是否为黄色进行判断
				   numOfyellow++;
			   }
			   if (image.at<Vec3b>(i, j)[0] <= 60 && image
  • 2
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值