亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:5日期:2022-07-22 18:47:18

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

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

一、顏色空間量化表

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

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

基于上述量化表,將各顏色分量按照下述公式合成為72維一維矢量:python下對(duì)hsv顏色空間進(jìn)行量化操作

二、量化代碼

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

#-*-coding:utf-8-*-import cv2import numpy as npfrom datetime import datetimefrom matplotlib import pyplot as pltdef 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 cv2import numpy as npfrom datetime import datetimefrom matplotlib import pyplot as plthlist = [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 + vquantilize_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)換類型 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 histif __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è)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 激情久久久久久久久久 | 永久免费毛片在线播放 | 国产一级在线播放 | 又黄又爽的成人免费网站 | 四色婷婷 | 久久精品色 | 东京加勒比中文字幕波多野结衣 | 一区中文字幕 | 成人毛片18女人毛片免费 | 亚洲综合网国产福利精品一区 | 毛片随便看 | 九九在线观看免费视频 | 免费黄色小视频 | 欧美激情毛片 | 欧洲成人在线视频 | 国产在线日韩 | 国产精品福利在线观看免费不卡 | 同性欧美可播放videos免费 | 国产精品玖玖玖影院 | 国产三级小视频 | 综合久久网 | 国内精品1区1区3区4区 | 日韩中文字幕不卡 | 久久中文字幕视频 | 日韩在线视频不卡一区二区三区 | 91久久夜色精品国产网站 | 污污视频在线观看黄 | 精品视频在线观看 | 亚洲妇熟xxxxx妇色黄 | 三级成人影院 | 午夜国产精品无套 | 在线免费不卡视频 | 婷婷六 | 一级黄色片美国 | 国产羞羞视频在线观看 | 免费在线观看黄色小视频 | 国产精品免费看久久久 | 日韩特黄特色大片免费视频 | 日韩中文字幕电影在线观看 | 国产白嫩在线观看视频 | 亚洲精品一区二区四季 |