最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Opencv圖像處理:如何判斷圖片里某個顏色值占的比例

 更新時間:2020年06月03日 08:39:18   作者:DS小龍哥  
這篇文章主要介紹了Opencv圖像處理:如何判斷圖片里某個顏色值占的比例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

一、功能

這里的需求是,判斷攝像頭有沒有被物體遮擋。這里只考慮用手遮擋---->判斷黑色顏色的范圍。

二、使用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++) //行數(shù)
  {
   for(int j = 0; j <image.cols;j++) //列數(shù)
   {
    //對該像素是否為指定顏色進行判斷 BGR 像素點
    //OpenCV 中 MAT類的默認三原色通道順序BGR
    /*
   動態(tài)地址訪問像素語法: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];
   對于三通道圖像,每個像素存儲了三個值,分別為藍色、綠色、紅色通道上的數(shù)值。
   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++) //行數(shù)
 {
  for(int j = 0; j <qimage.width();j++) //列數(shù)
  {
   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;
}

補充知識:判斷一批圖片中含有某中顏色物體的圖片個數(shù)占總圖片的比例

最近在做一個語義分割項目,使用Label工具進行了類別的標注.然后不同類別生成了不同的顏色,如需要代碼可以參考.后來我想統(tǒng)計一下含有一種類別的圖片和含有兩種類別的圖片占總圖片的比例,下面是我的代碼:

代碼思路:

1)循環(huán)讀取文件夾中的圖片

2)循環(huán)讀取圖片的每一個像素點,當圖片的像素點和你檢測的物體像素點一致時,對應類別加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的個數(shù)
number1=0#一種道路類型并且比例小于0.0638的個數(shù)
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值,我將它們作為我的判斷條件
      如不你不知道可以在網(wǎng)上查找自己想查看比例的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時的個數(shù)
  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圖像處理:如何判斷圖片里某個顏色值占的比例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python制作一個簡單的gui 數(shù)據(jù)庫查詢界面

    python制作一個簡單的gui 數(shù)據(jù)庫查詢界面

    這篇文章主要介紹了python制作一個簡單的gui 數(shù)據(jù)庫查詢界面,幫助大家更好的理解和學習python tkinter的使用,感興趣的朋友可以了解下
    2020-11-11
  • Python3實現(xiàn)將本地JSON大數(shù)據(jù)文件寫入MySQL數(shù)據(jù)庫的方法

    Python3實現(xiàn)將本地JSON大數(shù)據(jù)文件寫入MySQL數(shù)據(jù)庫的方法

    這篇文章主要介紹了Python3實現(xiàn)將本地JSON大數(shù)據(jù)文件寫入MySQL數(shù)據(jù)庫的方法,涉及Python針對json大數(shù)據(jù)文件的逐行讀取、mysql數(shù)據(jù)庫寫入等相關操作技巧,需要的朋友可以參考下
    2018-06-06
  • pandas中Series的使用方式

    pandas中Series的使用方式

    這篇文章主要介紹了pandas中Series的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python光學仿真光的偏振編程理解學習

    Python光學仿真光的偏振編程理解學習

    這篇文章主要為大家介紹了通過Python光學仿真來理解光的偏振編程學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • anaconda中Conda創(chuàng)建虛擬環(huán)境的實現(xiàn)步驟

    anaconda中Conda創(chuàng)建虛擬環(huán)境的實現(xiàn)步驟

    在Anaconda中,可以使用conda命令來創(chuàng)建和管理虛擬環(huán)境,本文主要介紹了anaconda中Conda創(chuàng)建虛擬環(huán)境的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Jupyter Notebook切換conda虛擬環(huán)境的實現(xiàn)步驟

    Jupyter Notebook切換conda虛擬環(huán)境的實現(xiàn)步驟

    本文主要介紹了Jupyter Notebook切換conda虛擬環(huán)境的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • python簡單程序讀取串口信息的方法

    python簡單程序讀取串口信息的方法

    這篇文章主要介紹了python簡單程序讀取串口信息的方法,涉及Python操作serial模塊的技巧,需要的朋友可以參考下
    2015-03-03
  • 深入理解NumPy簡明教程---數(shù)組2

    深入理解NumPy簡明教程---數(shù)組2

    這篇文章主要介紹了深入理解NumPy簡明教程---數(shù)組2,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-12-12
  • python 剪切移動文件的實現(xiàn)代碼

    python 剪切移動文件的實現(xiàn)代碼

    移動復制文件通過os.rename方法,先進行文件是否存在判斷,如需更加復雜相同文件判斷可以根據(jù)文件屬性進行判斷,此處只使用同名檢查,并刪除已存在文件,來實現(xiàn)覆蓋。這篇文章主要介紹了python 剪切移動文件的實現(xiàn)代碼,需要的朋友可以參考下
    2018-08-08
  • python如何在pygame中設置字體并顯示中文詳解

    python如何在pygame中設置字體并顯示中文詳解

    再簡單的游戲界面中均涉及文字處理,下面這篇文章主要給大家介紹了關于python如何在pygame中設置字體并顯示中文的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01

最新評論

龙门县| 且末县| 合川市| 马鞍山市| 祁阳县| 南召县| 买车| 科技| 万州区| 湖南省| 公安县| 海原县| 革吉县| 偏关县| 自贡市| 乌兰县| 盖州市| 钟山县| 安塞县| 吴堡县| 耿马| 庐江县| 年辖:市辖区| 锡林浩特市| 宾阳县| 儋州市| 佛冈县| 高密市| 北京市| 宽城| 怀来县| 喀喇沁旗| 文昌市| 周宁县| 怀柔区| 开阳县| 萝北县| 景泰县| 阳泉市| 黄石市| 荣昌县|