圆月山庄资源网 Design By www.vgjia.com
一、功能
这里的需求是,判断摄像头有没有被物体遮挡。这里只考虑用手遮挡---->判断黑色颜色的范围。
二、使用OpenCV的Mat格式图片遍历图片
下面代码里,传入的图片的尺寸是640*480,判断黑色范围。
/* 在图片里查找指定颜色的比例 */ int Widget::Mat_color_Find(QImage qimage) { Mat image = QImage2cvMat(qimage);//将图片加载进来 int num = 0;//记录颜色的像素点 float rate;//要计算的百分率 //遍历图片的每一个像素点 for(int i = 0; i < image.rows;i++) //行数 { for(int j = 0; j <image.cols;j++) //列数 { //对该像素是否为指定颜色进行判断 BGR 像素点 //OpenCV 中 MAT类的默认三原色通道顺序BGR /* 动态地址访问像素语法:image.at<Vec3b>(i,j)[0]、image.at<uchar>(i, j) 访问三通道图像的单个像素: int b = image.at<Vec3b>(i, j)[0]; int g = image.at<Vec3b>(i, j)[1]; int r = image.at<Vec3b>(i, j)[2]; 对于三通道图像,每个像素存储了三个值,分别为蓝色、绿色、红色通道上的数值。 int gray_data = image.at<uchar>(i, j); 用来访问灰度图像的单个像素。对于灰度图像,每个像素只存储一个值 */ if((image.at<Vec3b>(i, j)[0] <= 120 && image.at<Vec3b>(i, j)[1] <= 120 && image.at<Vec3b>(i, j)[2] <= 120)) { num++; } } } rate = (float)num / (float)(image.rows * image.cols); //阀值为 0.249255 表示为全黑 if(rate>0.20) { qDebug()<<":Mat:故意遮挡摄像头"; } qDebug()<<"Mat:比例"<<rate; return 0; } Mat Widget::QImage2cvMat(QImage image) { Mat mat; switch(image.format()) { case QImage::Format_ARGB32: case QImage::Format_RGB32: case QImage::Format_ARGB32_Premultiplied: mat = Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(), image.bytesPerLine()); break; case QImage::Format_RGB888: mat = Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine()); cvtColor(mat, mat, CV_BGR2RGB); break; case QImage::Format_Indexed8: mat = Mat(image.height(), image.width(), CV_8UC1, (void*)image.constBits(), image.bytesPerLine()); break; } return mat; }
三、使用QImage遍历像素点
/* 在图片里查找指定颜色的比例 */ int Widget::qimage_color_Find(QImage qimage) { int num = 0;//记录颜色的像素点 float rate;//要计算的百分率 quint8 r,g,b; //遍历图片的每一个像素点 for(int i = 0; i < qimage.height();i++) //行数 { for(int j = 0; j <qimage.width();j++) //列数 { QRgb rgb=qimage.pixel(j,i); r=qRed(rgb); g=qGreen(rgb); b=qBlue(rgb); if((r <= 120 && g <= 120 && b <= 120)) { num++; } } } rate = (float)num / (float)(qimage.height() * qimage.width()); //阀值为 0.99777 表示为全黑 if(rate>0.60) { //qDebug()<<"qimage:故意遮挡摄像头"; } qDebug()<<"qimage:比例:"<<rate; return 0; }
补充知识:判断一批图片中含有某中颜色物体的图片个数占总图片的比例
最近在做一个语义分割项目,使用Label工具进行了类别的标注.然后不同类别生成了不同的颜色,如需要代码可以参考.后来我想统计一下含有一种类别的图片和含有两种类别的图片占总图片的比例,下面是我的代码:
代码思路:
1)循环读取文件夹中的图片
2)循环读取图片的每一个像素点,当图片的像素点和你检测的物体像素点一致时,对应类别加1.
3)读取完图片后计算每一类的比例.
import cv2 import os import matplotlib.pyplot as plt picture_path="/home/wsb/桌面/picture" picture_list=os.listdir(picture_path) total_picture=len(picture_list) total=total_picture per=[] number=0#图片中道路类型为1的个数 number1=0#一种道路类型并且比例小于0.0638的个数 number2=0 for item in picture_list: src = os.path.join(os.path.abspath(picture_path), item) print("start: %s "%item) total_picture-=1 mat=cv2.imread(src) height=mat.shape[0] width=mat.shape[1] ground=0 zero=0 one=0 two=0 three=0 four=0 five=0 six=0 seven=0 eight=0 rateground=0 rate0=0 rate1=0 rate2=0 rate3=0 rate4=0 rate5=0 rate6=0 rate7=0 rate8=0 rate=0 road_type=0 for i in range(height): for j in range(width): # print("r:%s"%mat[i][j][0]) # print("r:%s"%mat[i][j][1]) # print("r:%s"%mat[i][j][2]) ''' 我这里共有9种分类情况,况且我已知道每一种颜色的具体rgb值,我将它们作为我的判断条件 如不你不知道可以在网上查找自己想查看比例的rgb值或者范围 ''' if mat[i][j][0]==0 and mat[i][j][1]==0 and mat[i][j][2]==0: ground+=1 elif mat[i][j][0]==128 and mat[i][j][1]==0 and mat[i][j][2]==0: zero+=1 elif mat[i][j][0]==0 and mat[i][j][1]==128 and mat[i][j][2]==0: one+=1 elif mat[i][j][0]==128 and mat[i][j][1]==128 and mat[i][j][2]==0: two+=1 elif mat[i][j][0]==0 and mat[i][j][1]==0 and mat[i][j][2]==128: three+=1 elif mat[i][j][0]==128 and mat[i][j][1]==0 and mat[i][j][2]==128: four+=1 elif mat[i][j][0]==0 and mat[i][j][1]==128 and mat[i][j][2]==128: five+=1 elif mat[i][j][0]==128 and mat[i][j][1]==128 and mat[i][j][2]==128: six+=1 elif mat[i][j][0]==0 and mat[i][j][1]==0 and mat[i][j][2]==64: seven+=1 elif mat[i][j][0]==0 and mat[i][j][1]==0 and mat[i][j][2]==192: eight+=1 else: print("输入正确的图片,或者更改上面判断条件的像素值") rateground=ground/(height*width) rate0=zero/(height*width) if rate0!=0: road_type+=1 rate1=one/(height*width) if rate1!=0: road_type+=1 rate2=two/(height*width) if rate2!=0: road_type+=1 rate3=three/(height*width) if rate3!=0: road_type+=1 rate4=four/(height*width) if rate4!=0: road_type+=1 rate5=five/(height*width) if rate5!=0: road_type+=1 rate6=six/(height*width) if rate6!=0: road_type+=1 rate7=seven/(height*width) if rate7!=0: road_type+=1 rate8=eight/(height*width) if rate8!=0: road_type+=1 rate=rate0+rate1+rate2+rate3+rate4+rate5+rate6+rate7+rate8 per.append(rate) if road_type==1: number+=1 if rate<0.0638: number1+=1#一种类型道路并且所占比例小于0.0638的情况 else: if rate<0.532: number2+=1#两种道路类型,并且正确正确道路类型所占比例小于0.532时的个数 print("the remaining %d"%total_picture) A=number/total#图片中道路类型大于1种的概率 A1=number1/total#图片中一种道路类型并且比例小于0.0638的概率 A2=number2/total#图片中有两种道路,并且一种道路所占比例小于0.532时的概率 print("A1:%s"%A1) print("the precentage of one road is %s"%A) print("the precentage of two road is %s"%(1-A)) print("A2:%s"%A2) plt.plot(per) plt.ylabel('the percentage of road') plt.show()
以上这篇Opencv图像处理:如何判断图片里某个颜色值占的比例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
标签:
Opencv,图片,颜色值
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月02日
2024年11月02日
- PatriciaPaay-Playmate(ExpandedEditionRemastered2024)[24Bit-96kHz]FLAC
- 蒋志光韦绮姗.2014-传奇巨声【环星】【WAV+CUE】
- 关淑怡.2008-演唱会+无尽经典3CD【环球】【WAV+CUE】
- 伍佰.2002-冬之火九重天演唱会特选录音专辑2CD【滚石】【WAV+CUE】
- 李宗盛1996《李宗盛的凡人歌2CD》滚石[WAV+CUE][1G]
- 刘德华 《天意》1:1直刻黑胶LPCD[WAV+CUE][1.1G]
- 刘德丽2024《赤的疑惑HQCD》头版限量编号MQA[低速原抓WAV+CUE]
- 英雄联盟万圣节有什么皮肤返场 2024万圣节皮肤返场一览
- lol万圣节赠礼活动什么时候开始 2024万圣节活动时间介绍
- 2024全球总决赛blg是全华班吗 全球总决赛blg选手所属国家介绍
- 《LOL》S14半决赛:T1战胜GEN晋级决赛!对决BLG
- 《完蛋美女前传》白白演员抱怨:都没人玩我的线
- 玩家热议OLED屏对画面提升巨大:比PS5 Pro值得买
- PatriciaPaay-TheLadyIsAChamp(ExpandedEdition)(2024)[24Bit-96kHz]FLAC
- 尚士达.2024-莫回头【智慧小狗】【DTS-WAV分轨】