您的位置:首页 > 运维架构

学习opencv

2014-04-15 18:50 148 查看
def preprocess_hog(digits):

samples = []

for img in digits:

gx = cv2.Sobel(img, cv2.CV_32F, 1,
0)

gy = cv2.Sobel(img, cv2.CV_32F, 0,
1)

mag, ang = cv2.cartToPolar(gx, gy)

#bin_n = 16

bin_n = 32

bin = np.int32(bin_n*ang/(2*np.pi))

bin_cells = bin[:10,:10], bin[10:,:10], bin[:10,10:],
bin[10:,10:]

mag_cells = mag[:10,:10], mag[10:,:10], mag[:10,10:],
mag[10:,10:]

hists = [np.bincount(b.ravel(), m.ravel(), bin_n)
for b, m in zip(bin_cells, mag_cells)]

hist = np.hstack(hists)

# transform to
Hellinger kernel

eps = 1e-7

hist /= hist.sum() + eps

hist = np.sqrt(hist)

hist /= norm(hist) + eps

samples.append(hist)

return np.float32(samples)

解释:(没办法,我是小白,完全不懂,数学巨菜,python现学,领导指派,不得不来,再找工作,可是没信啊。。。。。悲剧,只好看一句查一句了)

cv2.cartToPolar(x, y[, magnitude[, angle[, angleInDegrees]]]) → magnitude, angle

作用:笛卡尔坐标转换为极坐标,magnitude极径,angle极角
笛卡尔坐标系就是直角坐标系和斜角坐标系的统称。
相交于原点的两条数轴,构成了平面仿射坐标系。如两条数轴上的度量单位相等,则称此仿射坐标系为笛卡尔坐标系。两条数轴互相垂直的笛卡尔坐标系,称为笛卡尔直角坐标系,否则称为笛卡尔斜角坐标系。
(看明白没?哈哈,貌似就是我们以前用的直角坐标系的父集,这里好像就是用的直角坐标系。你是不是想问我为啥要把这么长的定义放在这里?当然是为了让你看了头晕啊。。。。)

极坐标的定义:

平面内取一个定点O,
叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(通常取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度,θ表示从Ox到OM的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对
(ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: