3
私はopencv Matを使用していますが、どのようにsin()をすべての要素に適用できますか? ループを使用して各要素を取得し、罪を1つずつ計算する必要がありますか?よろしくです。 よろしくお願いします。opencvのすべての要素にsin()を適用する方法Mat
私はopencv Matを使用していますが、どのようにsin()をすべての要素に適用できますか? ループを使用して各要素を取得し、罪を1つずつ計算する必要がありますか?よろしくです。 よろしくお願いします。opencvのすべての要素にsin()を適用する方法Mat
私はそうすることができるの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値を簡単に得ることができます。ラジアンの場合、最後のパラメータをTrue
に切り替えることができます。
numpyがない場合は、すべての要素をループする必要があります。 –
@ Martin Beckett - 多分Python中心のビットですが、私は素早くすべき 'LUT'アプローチを追加しました。 – fraxel
優れた答え、LUTは非常に良いアプローチです(8ビットイメージを想定) –