欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python下對(duì)hsv顏色空間進(jìn)行量化操作

 更新時(shí)間:2020年06月04日 11:05:55   作者:MoonBreeze_Ma  
這篇文章主要介紹了python下對(duì)hsv顏色空間進(jìn)行量化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

更新:優(yōu)化了代碼,理由numpy的ufunc函數(shù)功能替換了之前的雙重for循環(huán),測(cè)試圖片大小為692*1024*3,優(yōu)化前運(yùn)行時(shí)間為6.9s,優(yōu)化后為0.8s。

由于工作需要,需要計(jì)算顏色直方圖來(lái)提取顏色特征,但若不將顏色空間進(jìn)行量化,則直方圖矢量維數(shù)過(guò)高,不便于使用。但是看了opencv API后并未發(fā)現(xiàn)提供了相關(guān)函數(shù)能夠在計(jì)算顏色直方圖的同時(shí)進(jìn)行量化,因此這部分功能只能自己實(shí)現(xiàn)。下面分為兩個(gè)部分進(jìn)行介紹:

一、顏色空間量化表

由于RGB模型不夠直觀,不符合人類(lèi)視覺(jué)習(xí)慣,因此在進(jìn)行顏色特征提取前,需要將照片從RGB顏色模型轉(zhuǎn)換為更符合人類(lèi)視覺(jué)的HSV模型。在提取顏色特征時(shí),最常用的方法之一為顏色直方圖法,但一張圖片中出現(xiàn)的顏色一般特別多,導(dǎo)致直方圖矢量的維數(shù)較高,因此需要對(duì)HSV空間進(jìn)行量化。根據(jù)人眼對(duì)顏色的感知特性,采用較為常用的量化方法,即按照如下對(duì)應(yīng)關(guān)系進(jìn)行量化:

基于上述量化表,將各顏色分量按照下述公式合成為72維一維矢量:

二、量化代碼

代碼使用純python寫(xiě)成,效率偏低,處理388*500像素的照片用時(shí)1.45秒。在quantilize函數(shù)中,未使用if-else判斷語(yǔ)句,因此至少節(jié)省了1/3的時(shí)間。但這個(gè)速度顯然是無(wú)法令人滿(mǎn)意的,用C++效率應(yīng)該會(huì)更高點(diǎn)。如果有人有更好的想法,歡迎在下方評(píng)論交流。

#-*-coding:utf-8-*-
import cv2
import numpy as np
from datetime import datetime
from matplotlib import pyplot as plt

def colors(imagepath):
  img = cv2.imread(imagepath)
  hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
  nhsv = np.zeros(hsv.shape[:2], dtype=np.uint8)
  t2 = datetime.now()
  for i in range(hsv.shape[0]):
    for j in range(hsv.shape[1]):
      nhsv[i][j] = quantilize(hsv[i][j])
  print datetime.now() - t2
  hist = cv2.calcHist([nhsv], [0], None, [72], [0,71]) # 40x faster than np.histogramfaster than np.histogram
  plt.plot(hist,color = 'r')
  plt.xlim([0, 72])
  plt.show()

def quantilize(value):
  '''hsv直方圖量化
  value : [21, 144, 23] h, s, v
  opencv中,h-[0,180], s-[0,255], v-[0,255]
  '''
  # 
  value[0] = value[0] * 2
  hlist = [20, 40, 75, 155, 190, 270, 290, 316, 360]
  svlist = [21, 178, 255]
  for i in range(len(hlist)):
    if value[0] <= hlist[i]:
      h = i % 8
      break
  for i in range(len(svlist)):
    if value[1] <= svlist[i]:
      s = i
      break
  for i in range(len(svlist)):
    if value[2] <= svlist[i]:
      v = i
      break
  return 9 * h + 3 * s + v

以上,歡迎批評(píng)交流~

三、更新

#-*-coding:utf-8-*-
import cv2
import numpy as np
from datetime import datetime
from matplotlib import pyplot as plt

hlist = [20, 40, 75, 155, 190, 270, 290, 316, 360]
svlist = [21, 178, 255]

def quantilize(h, s, v):
  '''hsv直方圖量化'''
  # value : [21, 144, 23] h, s, v
  h = h * 2
  for i in range(len(hlist)):
    if h <= hlist[i]:
      h = i % 8
      break
  for i in range(len(svlist)):
    if s <= svlist[i]:
      s = i
      break
  for i in range(len(svlist)):
    if v <= svlist[i]:
      v = i
      break
  return 9 * h + 3 * s + v

quantilize_ufunc = np.frompyfunc(quantilize, 3, 1) # 自定義ufunc函數(shù),即將quantilize函數(shù)轉(zhuǎn)化為ufunc函數(shù),其輸入?yún)?shù)為3個(gè),輸出參數(shù)為1個(gè)。

def colors(img):
  hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
  nhsv = quantilize_ufunc(hsv[:,:,0], hsv[:,:,1], hsv[:,:,2]).astype(np.uint8) # 由于frompyfunc函數(shù)返回結(jié)果為對(duì)象,所以需要轉(zhuǎn)換類(lèi)型
  hist = cv2.calcHist([nhsv], [0], None, [72], [0,71]) # 40x faster than np.histogram
  hist = hist.reshape(1, hist.shape[0]).astype(np.int32).tolist()[0]
  return hist

if __name__ == '__main__':
  img_path = path + 'test.jpg'
  img = cv2.imread(img_path)
  colors(img)

結(jié)果

[0, 11, 31490, 100, 3, 32685, 0, 28, 313, 0, 0, 3268, 31, 0, 558364, 6, 1, 441, 0, 0, 2301, 92, 0, 34056, 0, 1, 396, 0, 0, 2682, 84, 5, 712, 0, 137, 55, 0, 0, 1215, 20, 2, 224, 0, 3, 0, 0, 0, 13838, 56, 0, 23474, 63, 23, 1, 0, 0, 4764, 0, 0, 2335, 0, 25, 27, 0, 0, 2302, 5, 0, 1676, 1, 59, 389]

以上這篇python下對(duì)hsv顏色空間進(jìn)行量化操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python獲取DLL和EXE文件版本號(hào)的方法

    Python獲取DLL和EXE文件版本號(hào)的方法

    這篇文章主要介紹了Python獲取DLL和EXE文件版本號(hào)的方法,實(shí)例分析了Python獲取系統(tǒng)文件信息的技巧,需要的朋友可以參考下
    2015-03-03
  • python中文分詞教程之前向最大正向匹配算法詳解

    python中文分詞教程之前向最大正向匹配算法詳解

    中文分詞是中文文本處理的一個(gè)基礎(chǔ)性工作,然而長(zhǎng)久以來(lái),在Python編程領(lǐng)域,一直缺少高準(zhǔn)確率、高效率的分詞組件。下面這篇文章主要給大家介紹了關(guān)于python中文分詞教程之前向最大正向匹配算法的相關(guān)資料,需要的朋友可以參考下。
    2017-11-11
  • 由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集

    由淺入深學(xué)習(xí)TensorFlow MNIST 數(shù)據(jù)集

    這篇文章主要由淺入深學(xué)習(xí)的講解TensorFlow MNIST 數(shù)據(jù)集,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • python 爬蟲(chóng) 批量獲取代理ip的實(shí)例代碼

    python 爬蟲(chóng) 批量獲取代理ip的實(shí)例代碼

    今天小編就為大家分享一篇python 爬蟲(chóng) 批量獲取代理ip的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • PyCharm如何導(dǎo)入python項(xiàng)目的方法

    PyCharm如何導(dǎo)入python項(xiàng)目的方法

    這篇文章主要介紹了PyCharm如何導(dǎo)入python項(xiàng)目的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python集成開(kāi)發(fā)工具Pycharm的安裝和使用詳解

    Python集成開(kāi)發(fā)工具Pycharm的安裝和使用詳解

    這篇文章主要介紹了Python集成開(kāi)發(fā)工具Pycharm的安裝和使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Pytest?Fixture參數(shù)講解及使用

    Pytest?Fixture參數(shù)講解及使用

    這篇文章主要介紹了Pytest之Fixture參數(shù)詳解及使用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • Python實(shí)現(xiàn)的矩陣轉(zhuǎn)置與矩陣相乘運(yùn)算示例

    Python實(shí)現(xiàn)的矩陣轉(zhuǎn)置與矩陣相乘運(yùn)算示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的矩陣轉(zhuǎn)置與矩陣相乘運(yùn)算,結(jié)合實(shí)例形式分析了Python針對(duì)矩陣進(jìn)行轉(zhuǎn)置與相乘運(yùn)算的相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-03-03
  • 總結(jié)Python使用過(guò)程中的bug

    總結(jié)Python使用過(guò)程中的bug

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著Python使用過(guò)程中的bug展開(kāi),文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • Python中Pickle模塊和base64模塊的使用解析

    Python中Pickle模塊和base64模塊的使用解析

    這篇文章主要介紹了Python中Pickle模塊和base64模塊的使用解析,pickle模塊是python的標(biāo)準(zhǔn)模塊,提供了對(duì)于python數(shù)據(jù)的序列化操作,可以將數(shù)據(jù)轉(zhuǎn)換為bytes類(lèi)型,其序列化速度比json模塊要高,需要的朋友可以參考下
    2023-09-09

最新評(píng)論