基于HOG+SVM的貓咪識(shí)別器

目的

使用HOG+SVM算法和OpenCV實(shí)現(xiàn)一個(gè)圖片分類(lèi)器,通過(guò)自己訓(xùn)練分類(lèi)器,達(dá)到可以判斷任意圖片是否是貓咪的效果

實(shí)驗(yàn)環(huán)境

python2.7
win10

實(shí)驗(yàn)知識(shí)點(diǎn)

-HOG+SVM分類(lèi)器的基本原理
-OpenCV處理圖片
-訓(xùn)練分類(lèi)器,以得到適合自己項(xiàng)目的分類(lèi)器
-Python文件操作

下面會(huì)首先介紹一下OpenCV,HOG,SVM的相關(guān)知識(shí)

  • Opencv

1.讀取圖片
import cv2

img_path = 'test.jpg'
image = cv2.imread(filename=img_path)

#窗口默認(rèn)一直處于彈出窗狀態(tài)
cv2.waitKey()
#按任意鍵盤(pán)巧勤,銷(xiāo)毀窗口
cv2.destroyAllWindows()
2.圖片數(shù)據(jù)類(lèi)型

圖像是由像素組成的,而像素實(shí)際上就是帶有坐標(biāo)位置和顏色信息的點(diǎn)。我們把圖片想象成由若干行栓辜,若干列的點(diǎn)組成的, 現(xiàn)實(shí)中有RGB顏色系統(tǒng)垛孔,我們可以把圖中任意一點(diǎn)(位置在第m行藕甩,第n列)的點(diǎn)A表示為

A[m,n] = [blue,green,red]

我們可以看下image的shape
800行,480列的點(diǎn)組成的圖片周荐,RGB三色狭莱,圖片為彩色

>>>print(image.shape)
>>>(800,480,3)  
3.裁剪圖片大小

這里介紹裁剪圖片大小的方法,由于輸入到分類(lèi)器的圖片都是固定像素的,所以我們需要對(duì)下載的圖片數(shù)據(jù)進(jìn)行處理,使其符合我們程序的要求概作。將大圖片裁減成固定像素的小圖片的程序如下:

# -*- coding: utf-8 -*-
'''
這段代碼會(huì)掃描Python腳本所在的文件夾的子文件夾other文件夾下的所有.jpg文件腋妙,
然后使用OpenCV讀取圖片數(shù)據(jù),
并按照指定的大小進(jìn)行縮放讯榕,
將縮放后的結(jié)果寫(xiě)入到指定目錄下的指定圖片中骤素。
'''
import numpy as np 
import cv2
from os.path import dirname,join,basename
from glob import glob
'''
glob參考http://python.jobbole.com/81552/
os.path.join參考http://www.cnblogs.com/jsplyy/p/5634640.html
'''
num = 0
#dirname(__file__)參考http://blog.csdn.net/lxjames833539/article/details/5251608
for i in glob(join(dirname(__file__)+'\dog','*.jpg')):
    img = cv2.imread(i)
    '''
    interpolation即插值法
    INTER_AREA  - 使用像素區(qū)域關(guān)系進(jìn)行重采樣。
    它可能是圖像抽取的首選方法愚屁,因?yàn)樗鼤?huì)產(chǎn)生無(wú)云紋理的結(jié)果济竹。
    但是當(dāng)圖像縮放時(shí),它類(lèi)似于INTER_NEAREST方法
    '''
    res = cv2.resize(img,(194,259),interpolation = cv2.INTER_AREA)
    cv2.imwrite('E:/test/'+str(num)+'.jpg',res)
    num +=1
print('all done')
##窗口默認(rèn)一直處于彈出窗狀態(tài)
cv2.waitKey(0)
##按任意鍵盤(pán)霎槐,銷(xiāo)毀窗口
cv2.destroyAllWindows()
  • HOG

https://www.leiphone.com/news/201708/ZKsGd2JRKr766wEd.html

  • SVM

實(shí)驗(yàn)過(guò)程

SVM是一個(gè)由分類(lèi)超平面定義的判別分類(lèi)器送浊。也就是說(shuō)給定一組帶標(biāo)簽的訓(xùn)練樣本,算法將會(huì)輸出一個(gè)最優(yōu)超平面對(duì)新樣本(測(cè)試樣本)進(jìn)行分類(lèi)丘跌。

這也是監(jiān)督類(lèi)型機(jī)器學(xué)習(xí)的特點(diǎn)袭景,即唁桩,把一堆帶有標(biāo)簽的數(shù)據(jù)輸入到機(jī)器中,讓機(jī)器根據(jù)給定的數(shù)據(jù)計(jì)算出規(guī)則浴讯,再利用這個(gè)規(guī)則朵夏,去對(duì)未知數(shù)據(jù)進(jìn)行分類(lèi)。說(shuō)白了榆纽,就是先積累幾年工作經(jīng)驗(yàn)仰猖,然后去工作。

本實(shí)驗(yàn)是讀入輸入圖片的灰度圖奈籽,即黑白的饥侵。然后計(jì)算該圖片的hog值,將計(jì)算得到的結(jié)果作為向量來(lái)代表該圖片衣屏。對(duì)由很多張圖片組成的向量集進(jìn)行計(jì)算躏升,找到最大間距的分類(lèi)超平面,進(jìn)而分類(lèi)數(shù)據(jù)狼忱。

hog的全稱(chēng)是Histogram of Oriented Gradient, HOG膨疏,即方向梯度直方圖。它是一種在計(jì)算機(jī)視覺(jué)和圖像處理中用來(lái)進(jìn)行物體檢測(cè)的特征描述子钻弄。它通過(guò)計(jì)算和統(tǒng)計(jì)圖像局部區(qū)域的梯度方向直方圖來(lái)構(gòu)成特征佃却。Hog特征結(jié)合SVM分類(lèi)器已經(jīng)被廣泛應(yīng)用于圖像識(shí)別中,尤其在行人檢測(cè)中獲得了極大的成功窘俺。HOG+SVM進(jìn)行行人檢測(cè)的方法是法國(guó)研究人員Dalal在2005的CVPR上提出的饲帅,今天的很多行人檢測(cè)算法基本都是以HOG+SVM的思路。

主要思想

在一副圖像中瘤泪,局部目標(biāo)的表象和形狀(appearance and shape)能夠被梯度或邊緣的方向密度分布很好地描述灶泵。(本質(zhì):梯度的統(tǒng)計(jì)信息,而梯度主要存在于邊緣的地方)对途。
具體的實(shí)現(xiàn)方法是:首先將圖像分成小的連通區(qū)域赦邻,我們把它叫細(xì)胞單元。然后采集細(xì)胞單元中各像素點(diǎn)的梯度的或邊緣的方向直方圖实檀。最后把這些直方圖組合起來(lái)就可以構(gòu)成特征描述器惶洲。
提高性能:把這些局部直方圖在圖像的更大的范圍內(nèi)(我們把它叫區(qū)間或block)進(jìn)行對(duì)比度歸一化(contrast-normalized),所采用的方法是:先計(jì)算各直方圖在這個(gè)區(qū)間(block)中的密度劲妙,然后根據(jù)這個(gè)密度對(duì)區(qū)間中的各個(gè)細(xì)胞單元做歸一化。通過(guò)這個(gè)歸一化后儒喊,能對(duì)光照變化和陰影獲得更好的效果镣奋。
優(yōu)點(diǎn):與其他的特征描述方法相比,HOG有很多優(yōu)點(diǎn)怀愧。首先侨颈,由于HOG是在圖像的局部方格單元上操作余赢,所以它對(duì)圖像幾何的和光學(xué)的形變都能保持很好的不變性,這兩種形變只會(huì)出現(xiàn)在更大的空間領(lǐng)域上哈垢。其次妻柒,在粗的空域抽樣、精細(xì)的方向抽樣以及較強(qiáng)的局部光學(xué)歸一化等條件下耘分,只要行人大體上能夠保持直立的姿勢(shì)举塔,可以容許行人有一些細(xì)微的肢體動(dòng)作,這些細(xì)微的動(dòng)作可以被忽略而不影響檢測(cè)效果求泰。因此HOG特征是特別適合于做圖像中的人體檢測(cè)的央渣。

步驟

首先,我們根據(jù)已經(jīng)分類(lèi)好的數(shù)據(jù)集來(lái)對(duì)分類(lèi)器進(jìn)行訓(xùn)練渴频。我們的cat文件夾下全是貓的照片芽丹,而other文件夾下全不是貓,已經(jīng)完成了貼標(biāo)簽這個(gè)過(guò)程了卜朗。讓程序從這兩組數(shù)據(jù)里學(xué)習(xí)拔第,計(jì)算分類(lèi)的方法。

使用HOG+SVM算法進(jìn)行訓(xùn)練前场钉,需要先計(jì)算每張圖片的HOG值以得到供SVM分類(lèi)器使用的輸入向量蚊俺。計(jì)算該值的算法實(shí)現(xiàn)的一般過(guò)程為:

灰度化(OpenCV處理圖像時(shí),一般都處理為灰度圖像惹悄,忽略顏色干擾)
采用Gamma校正法對(duì)輸入圖像進(jìn)行顏色空間的標(biāo)準(zhǔn)化(歸一化)春叫;目的是調(diào)節(jié)圖像的對(duì)比度,降低圖像局部的陰影和光照變化所造成的影響泣港,同時(shí)可以抑制噪音的干擾暂殖;
計(jì)算圖像每個(gè)像素的梯度(包括大小和方向);主要是為了捕獲輪廓信息当纱,同時(shí)進(jìn)一步弱化光照的干擾呛每。
將圖像劃分成小cells(例如66像素/cell);
統(tǒng)計(jì)每個(gè)cell的梯度直方圖(不同梯度的個(gè)數(shù))坡氯,即可形成每個(gè)cell的descriptor晨横;
將每幾個(gè)cell組成一個(gè)block(例如3
3個(gè)cell/block),一個(gè)block內(nèi)所有cell的特征descriptor串聯(lián)起來(lái)便得到該block的HOG特征descriptor箫柳。
將圖像image內(nèi)的所有block的HOG特征descriptor串聯(lián)起來(lái)就可以得到該image(你要檢測(cè)的目標(biāo))的HOG特征descriptor了手形。這個(gè)就是最終的可供分類(lèi)使用的特征向量了。
在本實(shí)驗(yàn)中悯恍,沒(méi)有嚴(yán)格按照上述的過(guò)程實(shí)現(xiàn)库糠,我們采用了下述方法:我們?cè)诿總€(gè)cell內(nèi)計(jì)算X和Y方向的Sobel導(dǎo)數(shù)。然后找到每個(gè)像素的梯度和方向涮毫。此梯度被量化為16*16個(gè)整數(shù)值瞬欧。把每個(gè)圖像分成四個(gè)子圖方塊贷屎。對(duì)于每個(gè)子正方形,計(jì)算加權(quán)其幅度的方向(16*16bins)的直方圖艘虎。因此唉侄,每個(gè)子圖給我們一個(gè)包含16*16個(gè)值的向量。四個(gè)這樣的向量(分別代表四個(gè)子圖的16*16向量)一起給我們一個(gè)特征向量包含1024個(gè)值野建。這就是我們用來(lái)訓(xùn)練數(shù)據(jù)的特征向量属划。這部分的代碼如下所示:
(注:這段使用了Python3.6)

bin_n = 16*16 # Number of bins
def hog(img):
    x_pixel,y_pixel=194,259
    gx = cv2.Sobel(img, cv2.CV_32F, 1, 0)
    gy = cv2.Sobel(img, cv2.CV_32F, 0, 1)
    #cartToPolar函數(shù)參照 http://www.hahack.com/wiki/opencv-image.html
    mag, ang = cv2.cartToPolar(gx, gy)
    bins = np.int32(bin_n*ang/(2*np.pi))    # quantizing binvalues in (0...16)
    bin_cells = bins[:(int)(x_pixel/2),:(int)(y_pixel/2)], bins[(int)(x_pixel/2):,:(int)(y_pixel/2)], bins[:(int)(x_pixel/2),(int)(y_pixel/2):], bins[(int)(x_pixel/2):,(int)(y_pixel/2):]
    mag_cells = mag[:(int)(x_pixel/2),:(int)(y_pixel/2)], mag[(int)(x_pixel/2):,:(int)(y_pixel/2)], mag[:(int)(x_pixel/2),(int)(y_pixel/2):], mag[(int)(x_pixel/2):,(int)(y_pixel/2):]
    #bincount()統(tǒng)計(jì)出現(xiàn)的次數(shù) 參照http://blog.csdn.net/lanchunhui/article/details/50491632
    #ravel()參照http://blog.csdn.net/lanchunhui/article/details/50354978
    hists = [np.bincount(b.ravel(), m.ravel(), bin_n) for b, m in zip(bin_cells, mag_cells)]
    #hstack()返回結(jié)果為numpy的數(shù)組
    hist = np.hstack(hists)     # hist is a 64 bit vector
#    print hist.shape
#    print type(hist)
    return hist

完整的代碼如下所示,程序首先掃描cat和other文件夾內(nèi)的圖片贬墩,然后用灰度方式讀入榴嗅,計(jì)算每個(gè)圖片的hog值,然后建立SVM分類(lèi)器陶舞,使用輸入的數(shù)據(jù)進(jìn)行訓(xùn)練嗽测,將訓(xùn)練結(jié)果保存于svm_cat_data.dat文件中。

# -*- coding: utf-8 -*-
import numpy as np
import cv2
#from matplotlib import pyplot as plt
from os.path import dirname, join, basename
import sys
from glob import glob


bin_n = 16*16 # Number of bins

def hog(img):
    x_pixel,y_pixel=194,259
    gx = cv2.Sobel(img, cv2.CV_32F, 1, 0)
    gy = cv2.Sobel(img, cv2.CV_32F, 0, 1)
    mag, ang = cv2.cartToPolar(gx, gy)
    bins = np.int32(bin_n*ang/(2*np.pi))    # quantizing binvalues in (0...16)
    bin_cells = bins[:x_pixel/2,:y_pixel/2], bins[x_pixel/2:,:y_pixel/2], bins[:x_pixel/2,y_pixel/2:], bins[x_pixel/2:,y_pixel/2:]
    mag_cells = mag[:x_pixel/2,:y_pixel/2], mag[x_pixel/2:,:y_pixel/2], mag[:x_pixel/2,y_pixel/2:], mag[x_pixel/2:,y_pixel/2:]
    hists = [np.bincount(b.ravel(), m.ravel(), bin_n) for b, m in zip(bin_cells, mag_cells)]
    hist = np.hstack(hists)     # hist is a 64 bit vector
#    print hist.shape
#    print type(hist)
    return hist

#print glob(join(dirname(__file__)+'/cat','*.jpg'))
img={}
num=0
for fn in glob(join(dirname(__file__)+'/cat', '*.jpg')):
    img[num] = cv2.imread(fn,0)#參數(shù)加0肿孵,只讀取黑白數(shù)據(jù)唠粥,去掉0,就是彩色讀取停做。
#    print img[num].shape
    num=num+1
print num,' num'
print 'the file path is ', dirname(__file__)
positive=num
for fn in glob(join(dirname(__file__)+'/other', '*.jpg')):
    img[num] = cv2.imread(fn,0)#參數(shù)加0晤愧,只讀取黑白數(shù)據(jù),去掉0蛉腌,就是彩色讀取官份。
#    print img[num].shape
    num=num+1
print num,' num'
print positive,' positive'

trainpic=[]
for i in img:
#    print type(i)
    trainpic.append(img[i])

svm_params = dict( kernel_type = cv2.SVM_LINEAR,
                    svm_type = cv2.SVM_C_SVC,
                    C=2.67, gamma=5.383 )
#img = cv2.imread('02.jpg',0)
#hist_full = cv2.calcHist([img],[0],None,[256],[0,256])
#print hist_full
#plt.plot(hist_full)
#plt.show()

#img1 = cv2.imread('02.jpg',0)
#temp=img[0].ravel()
#print temp
#print len(temp)
temp=hog(img[0])
print temp.shape

#hogdata = [map(hog,img[i]) for i in img]
hogdata = map(hog,trainpic)
print np.float32(hogdata).shape,' hogdata'
trainData = np.float32(hogdata).reshape(-1,bin_n*4)
print trainData.shape,' trainData'
responses = np.float32(np.repeat(1.0,trainData.shape[0])[:,np.newaxis])
responses[positive:trainData.shape[0]]=-1.0
print responses.shape,' responses'
print len(trainData)
print len(responses)
print type(trainData)

svm = cv2.SVM()
svm.train(trainData,responses, params=svm_params)
svm.save('svm_cat_data.dat')

機(jī)器學(xué)習(xí)是一個(gè)不斷迭代的過(guò)程。訓(xùn)練的數(shù)據(jù)集越大越好烙丛,訓(xùn)練時(shí)間當(dāng)然也是越長(zhǎng)效果越好舅巷。當(dāng)機(jī)器認(rèn)錯(cuò)了圖片的時(shí)候,我們要把這個(gè)圖片拿出來(lái)河咽,標(biāo)記正確钠右,輸入機(jī)器再訓(xùn)練一遍,如此迭代下去忘蟹。本實(shí)驗(yàn)只訓(xùn)練了一次以演示原理飒房。

我們得到了訓(xùn)練好的數(shù)據(jù)svm_cat_data.dat后,可以用它來(lái)分類(lèi)測(cè)試圖片媚值。

建立程序如下:

# -*- coding: utf-8 -*-



import numpy as np
import cv2
#from matplotlib import pyplot as plt
from os.path import dirname, join, basename
import sys
from glob import glob

bin_n = 16*16 # Number of bins

def hog(img):
    x_pixel,y_pixel=194,259
    gx = cv2.Sobel(img, cv2.CV_32F, 1, 0)
    gy = cv2.Sobel(img, cv2.CV_32F, 0, 1)
    mag, ang = cv2.cartToPolar(gx, gy)
    bins = np.int32(bin_n*ang/(2*np.pi))    # quantizing binvalues in (0...16)
    bin_cells = bins[:x_pixel/2,:y_pixel/2], bins[x_pixel/2:,:y_pixel/2], bins[:x_pixel/2,y_pixel/2:], bins[x_pixel/2:,y_pixel/2:]
    mag_cells = mag[:x_pixel/2,:y_pixel/2], mag[x_pixel/2:,:y_pixel/2], mag[:x_pixel/2,y_pixel/2:], mag[x_pixel/2:,y_pixel/2:]
    hists = [np.bincount(b.ravel(), m.ravel(), bin_n) for b, m in zip(bin_cells, mag_cells)]
    hist = np.hstack(hists)     # hist is a 64 bit vector
#    print hist.shape
#    print type(hist)
    return hist

#print glob(join(dirname(__file__)+'/cat','*.jpg'))
img={}
num=0
for fn in glob(join(dirname(__file__)+'/cat', '*.jpg')):
    img[num] = cv2.imread(fn,0)#參數(shù)加0狠毯,只讀取黑白數(shù)據(jù),去掉0褥芒,就是彩色讀取嚼松。
#    print img[num].shape
    num=num+1
print num,' num'
positive=num
for fn in glob(join(dirname(__file__)+'/other', '*.jpg')):
    img[num] = cv2.imread(fn,0)#參數(shù)加0,只讀取黑白數(shù)據(jù),去掉0惜颇,就是彩色讀取。
#    print img[num].shape
    num=num+1
print num,' num'
print positive,' positive'

trainpic=[]
for i in img:
#    print type(i)
    trainpic.append(img[i])

svm_params = dict( kernel_type = cv2.SVM_LINEAR,
                    svm_type = cv2.SVM_C_SVC,
                    C=2.67, gamma=5.383 )

temp=hog(img[0])
print temp.shape

#hogdata = [map(hog,img[i]) for i in img]
hogdata = map(hog,trainpic)
print np.float32(hogdata).shape,' hogdata'
trainData = np.float32(hogdata).reshape(-1,bin_n*4)
print trainData.shape,' trainData'
#trainData.shape[0] = 89
#重新定義一個(gè)89行,轉(zhuǎn)置為89列,向量轉(zhuǎn)置np.newaxis,每個(gè)都賦值為1.0
responses = np.float32(np.repeat(1.0,trainData.shape[0])[:,np.newaxis])
# print responses
responses[positive:trainData.shape[0]]=-1.0
# print trainData

print responses.shape,' responses'
print len(trainData)
print len(responses)
print type(trainData)

svm = cv2.SVM()

svm.load('svm_cat_data.dat')

img = cv2.imread('E:/Python/cat/predict/05.jpg',0)
#print img.shapes,' img_test0'
hogdata = hog(img)
testData = np.float32(hogdata).reshape(-1,bin_n*4)
print testData.shape,' testData'
result = svm.predict(testData)
print result
if result > 0:
    print 'this pic is a cat!'

test_temp=[]
for fn in glob(join(dirname(__file__)+'/predict', '*.jpg')):
    img=cv2.imread(fn,0)#參數(shù)加0少辣,只讀取黑白數(shù)據(jù)凌摄,去掉0,就是彩色讀取漓帅。
    test_temp.append(img)
print len(test_temp),' len(test_temp)'

hogdata = map(hog,test_temp)
testData = np.float32(hogdata).reshape(-1,bin_n*4)
print testData.shape,' testData'
result = [svm.predict(eachone) for eachone in testData]
print result
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锨亏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子忙干,更是在濱河造成了極大的恐慌器予,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捐迫,死亡現(xiàn)場(chǎng)離奇詭異乾翔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)施戴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)反浓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人赞哗,你說(shuō)我怎么就攤上這事雷则。” “怎么了肪笋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵月劈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我藤乙,道長(zhǎng)猜揪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任湾盒,我火速辦了婚禮湿右,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罚勾。我一直安慰自己毅人,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布尖殃。 她就那樣靜靜地躺著丈莺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪送丰。 梳的紋絲不亂的頭發(fā)上缔俄,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼俐载。 笑死蟹略,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的遏佣。 我是一名探鬼主播挖炬,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼状婶!你這毒婦竟也來(lái)了意敛?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤草姻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后稍刀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體撩独,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡账月,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年担平,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拌禾。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡您市,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出手蝎,到底是詐尸還是另有隱情棵介,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布芳肌,位于F島的核電站亿笤,受9級(jí)特大地震影響净薛,放射性物質(zhì)發(fā)生泄漏肃拜。R本人自食惡果不足惜燃领,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凉泄。 院中可真熱鬧教藻,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至摔寨,卻和暖如春季惩,著一層夾襖步出監(jiān)牢的瞬間菜职,已是汗流浹背嫡意。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捣辆,地道東北人蔬螟。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像罪帖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邮屁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 目的 使用HOG+SVM算法和OpenCV實(shí)現(xiàn)一個(gè)圖片分類(lèi)器整袁,通過(guò)自己訓(xùn)練分類(lèi)器,達(dá)到可以判斷任意圖片是否是貓咪的...
    Co_zy閱讀 2,800評(píng)論 1 1
  • 前一節(jié)OpenCV For iOS(四-上): 人臉檢測(cè)及分類(lèi)器的訓(xùn)練說(shuō)到分類(lèi)器使用的 LBP Haar,這里補(bǔ)充...
    hehtao閱讀 2,496評(píng)論 0 3
  • 計(jì)算機(jī)應(yīng)用 2016,Vol. 36 Issue (11): 2979-2984,2992DOI:10.11772...
    wotacid閱讀 7,228評(píng)論 0 2
  • 姓名:徐嬌 學(xué)號(hào):17011210547 參考360百科 【嵌牛導(dǎo)讀】在圖像處理中佑吝,若要對(duì)圖像進(jìn)行特征提取坐昙,經(jīng)常會(huì)...
    徐Jiao閱讀 7,241評(píng)論 2 6
  • 親愛(ài)的張鵬,今天你也很棒芋忿!一天控制自己的情緒炸客,跟李工長(zhǎng)商量著來(lái),其實(shí)工作要講究方法戈钢,按照自己的原則痹仙,多學(xué)多聽(tīng)多考慮...
    張鵬_aa84閱讀 150評(píng)論 0 0