2012-05-03 54 views

回答

2

我使用Python和使用numpy的所以可以这样做:

>>> import cv 
>>> import numpy as np 
>>> im = cv.LoadImageM("aaa.jpg") 
>>> np.sin(im) 
array([[[ 0.36319944, 0.46771851, 0.99646664], 
     [ 0.98024565, -0.49104786, 0.46771851], 
     [ 0.69605851, -0.9983471 , -0.49104786], 
     ..., 
     [-0.58777064, -0.79041475, 0.60906792], 
     [-0.79041475, -0.94252455, 0.36319944], 
     [ 0.08839871, -0.58777064, -0.94252455]], 
    etc... 

否则,它应该很容易适应下面的Python代码来创建和使用一个查找表,cv.LUT

import cv 
import math 

im = cv.LoadImageM("aaa.jpg") 
dst = cv.CreateMat(im.height,im.width, cv.CV_32FC3) 
lut_sin = cv.CreateMat(256, 1, cv.CV_32FC3)  

for i in xrange(256):  
    s = math.sin(i) 
    cv.Set1D(lut_sin, i, (s,s,s,s)) 

cv.LUT(im,dst,lut_sin) 

print cv.Get2D(dst,0,0) 
#output, matches above: 
(0.36319944262504578, 0.46771851181983948, 0.99646663665771484, 0.0) 

对于浮点数据,你可以使用cv.PolarToCart

>>> import cv 
>>> im = cv.LoadImageM("aaa.jpg") 
>>> im2 = cv.CreateMat(im.height, im.width, cv.CV_32FC3) 
>>> cv.Convert(im,im2) 
>>> sin_of_angle = cv.CreateMat(im.height, im.width, cv.CV_32FC3) 
>>> cv.PolarToCart(None,im2,None,sin_of_angle,0) 
>>> cv.Get1D(sin_of_angle,0) 
(0.36319947242736816, 0.46771851181983948, 0.99646669626235962, 0.0) 
>>> cv.Get1D(sin_of_angle,1) 
(0.98024564981460571, -0.49104788899421692, 0.46771851181983948, 0.0) 

你也可以使用它来轻松获取cos值。您可以将最后一个参数切换为Radians的True

+0

但是,如果你没有numpy,那么你必须遍历所有的元素。 –

+0

@Martin Beckett - 也许这是一个以Python为中心的东西,我添加了一个应该很快的'LUT'方法。 – fraxel

+0

优秀的答案,LUT是一个非常好的方法(假设一个8位图像) –

相关问题