2017-08-17 4 views
2

は私は(i、j)は別のピクセルから特定の角度にあるピクセルの値を取得するにはどうすればよいですか?

次のコード

sum = image.getpixel(((i - 7), (j + 2))) + image.getpixel(((i - 6), (j + 2))) + image.getpixel(
    ((i - 5), (j + 1))) + image.getpixel(
    ((i - 4), (j + 1))) + image.getpixel(((i - 3), (j + 1))) + image.getpixel(((i - 2), (j + 1))) + image.getpixel(
    ((i - 1), j)) + image.getpixel((i, j)) + image.getpixel(((i + 1), j)) + image.getpixel(
    ((i + 2), (j - 1))) + image.getpixel(((i + 3), (j - 1))) + image.getpixel(((i + 4), (j - 1))) + image.getpixel(
    ((i + 5), (j - 1))) + image.getpixel(((i + 6), (j - 2))) + image.getpixel(((i + 7), (j - 2))) 
avg_sum = sum/15 
を検討して画素を一定の角度で線を形成するすべてのそれらの画素の値を取得しなければならないメソッドを実装しようとしています

上記のコードでは、i、jに関連するどのピクセルが角度15度の線を形成しているのか知っています。したがって、私はこれらすべてのピクセルの値を得ることができます。

現在のところ、このコードは、i、jを通して15度でこの線を形成する15ピクセルのグレイレベルの合計を見つけるので、これを行う簡単な方法があります。このコードを柔軟にして、長さ15ピクセルまたは13ピクセルまたは11ピクセルなどの行の合計を簡単に見つけることができるようにします。

+1

方法についてLineIterator](http://docs.opencv.org/ref/2.4/dc/dd2/classcv_1_1LineIterator.html)? – dhanushka

+0

openCVのLineIteratorの使用をサポートしています! – Micka

+0

どのように機能するのですか? –

答えて

2

三角法を使用できます。 sin(angle) = y/xだから、y = x*sin(angle)を思い出してください。希望の長さのx値の配列を作成し、y値の式に接続します。後でyの値を丸める必要があります。そして、それらのすべてを行の開始位置に翻訳することができます。

>>> import numpy as np 
>>> angle = 15*np.pi/180 
>>> x = np.arange(0,10) 
>>> y = np.round(np.sin(angle)*x).astype(int) 
>>> [(x,y) for x, y in zip(x, y)] 
[(0, 0), (1, 0), (2, 1), (3, 1), (4, 1), (5, 1), (6, 2), (7, 2), (8, 2), (9, 2)] 
関連する問題