本文目錄一覽:
- 1、python求兩點間直線所有坐標值
- 2、如何用python按順序獲取一個線條組成的圖形的點坐標
- 3、Python中的反三角函數求確定角度
- 4、python求兩點直線坐標
- 5、Python OpenCV 霍夫(Hough Transform)直線變換檢測原理,圖像處理第 33 篇博客
- 6、關於用python畫多邊形的角度問題
python求兩點間直線所有坐標值
#!/usr/bin/python
# encoding: utf-8
#
# filename: line.py
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return “(%d, %d)” % (self.x, self.y)
def line2(self, another):
if self.x == another.x:
step = 1 if self.y another.y else -1
y = self.y
while y != another.y:
yield Point(self.x, y)
y += step
elif self.y == another.y:
step = 1 if self.x another.x else -1
x = self.x
while x != another.x:
yield Point(x, self.y)
x += step
else:
d_x = self.x – another.x
d_y = self.y – another.y
s_x = 1 if d_x 0 else -1
s_y = 1 if d_y 0 else -1
if d_y:
delta = 1. * d_x / d_y
for i in xrange(0, d_x):
yield Point(self.x+i*s_x, self.y+i*s_x/delta)
elif d_x:
delta = 1. * d_y / d_x
for i in xrange(0, d_y):
yield Point(self.y+i*s_y/delta, self.y+i*s_y)
def tester():
pointA = Point(450, 649)
pointB = Point(326, 649)
print pointA, ‘~’, pointB
for point in pointA.line2(pointB):
print “%s”%point
print “+”*32
pointA = Point(450, 649)
pointB = Point(450, 863)
print pointA, ‘~’, pointB
for point in pointA.line2(pointB):
print “%s”%point
print “+”*32
pointA = Point(450, 649)
pointB = Point(326, 863)
print pointA, ‘~’, pointB
for point in pointA.line2(pointB):
print “%s”%point
if __name__ == “__main__”:
tester()
如何用python按順序獲取一個線條組成的圖形的點坐標
1、首先下載安裝python,建議安裝2.7版本以上,3.0版本以下,由於3.0版本以上不向下兼容,體驗較差。
2、打開文本編輯器,推薦editplus,notepad等,將文件保存成 .py格式,editplus和notepad支持識別python語法。
腳本第一行一定要寫上 #!usr/bin/python
表示該腳本文件是可執行python腳本
如果python目錄不在usr/bin目錄下,則替換成當前python執行程序的目錄。
3、編寫完腳本之後注意調試、可以直接用editplus調試。調試方法可自行百度。腳本寫完之後,打開CMD命令行,前提是python 已經被加入到環境變量中,如果沒有加入到環境變量,請百度
4、在CMD命令行中,輸入 「python」 + 「空格」,即 」python 「;將已經寫好的腳本文件拖拽到當前光標位置,然後敲回車運行即可。
Python中的反三角函數求確定角度
acos()方法返回x的反餘弦值,以弧度表示。
以下是acos()方法的語法:acos(x)
注意:此函數是無法直接訪問的,所以我們需要導入math模塊,然後需要用math的靜態對象來調用這個函數。x — 這必須是在範圍內的數字值-1到1,如果x大於1,則它會產生一個錯誤。
擴展資料
python運行的兩種方式
1、命令行:python +需要執行的代碼
特點:會立即看到效果,用於代碼調試,寫到內存中,不會永久保存
2、寫到文件裏面:python +執行文件的位置
特點:可以永久保存。
過程:
1、啟動python解釋器
2、將內容從硬盤讀取到內存中
3、執行python代碼
(再次強調:程序在未運行前跟普通文件無異,只有程序在運行時,文件內所寫的字符才有特定的語法意義)
python求兩點直線坐標
#判斷斜率是否相等.
#即點(cx,cy)是不是在點(ax,ay)和點(bx,by)確定的直線上.
def issame(ax,ay,bx,by,cx,cy):
kac=(ax-cx)*(cy-by)
kbc=(cx-bx)*(ay-cy)
return kac==kbc
#獲取點(ax,ay)和點(bx,by)確定的直線上所有的點的坐標
def getall(ax,ay,bx,by):
res=[]
for cx in range(500):
for cy in range(500):
if issame(ax,ay,bx,by,cx,cy):
res.append((cx,cy))
return res
#斜率為100的直線
print(getall(0,0,1,100))
結果:
[(0, 0), (1, 100), (2, 200), (3, 300), (4, 400)]
Python OpenCV 霍夫(Hough Transform)直線變換檢測原理,圖像處理第 33 篇博客
霍夫變換(Hough Transform)是圖像處理領域中,從圖像中識別幾何形狀的基本方法之一。主要識別具有某些相同特徵的幾何形狀,例如直線,圓形,本篇博客的目標就是從黑白圖像中識別出直線。
翻閱霍夫直線變換的原理時候,橡皮擦覺得原理部分需要先略過,否則很容易在這個地方陷進去,但是問題來了,這個原理略過了,直接應用函數,裏面有些參數竟然看不懂。例如極坐標,角度掃描範圍,這種函數就屬於繞不過去的知識點了,所以本文轉移方向,死磕原理,下面的博文將語無倫次的為你展示如何學習原理知識。
因為數學知識的貧乏,所以在學習階段會涉及到很多基礎概念的學習,一起來吧。
首先找到相對官方的資料,打開該 地址
下面是一個數學小白對原理的學習經驗。
教材說:眾所周知,一條直線在圖像二維空間可由兩個變量表示。
抱歉,小白還真不知道……即使學習過,這些年也早已經還給老師了。
一開始難道要學習笛卡爾坐標系,不,你低估小白的能力了,我第一個查詢的是 θ 讀作 西塔 ,是一個希臘字母。
什麼是笛卡爾坐標系?
這個比較簡單,直角坐標系。
斜率和截距
斜率,亦稱「角係數」,表示一條直線相對於橫坐標軸的傾斜程度。
一條直線與某平面直角坐標系橫坐標軸正半軸方向的夾角的正切值即該直線相對於該坐標系的斜率。
如果直線與 x 軸互相垂直,直角的正切直無窮大,故此直線不存在斜率。
對於一次函數 y=kx+b , k 就是該函數圖像的斜率。
在學習的時候,也學到如下內容:
截距:對 x 的截距就是 y=0 時, x 的值,對 y 的截距就是 x=0 時, y 的值,
截距就是直線與坐標軸的交點的橫(縱)坐標。 x 截距為 a , y 截距 b ,截距式就是: x/a+y/b=1(a≠0且b≠0) 。
斜率:對於任意函數上任意一點,其斜率等於其切線與 x 軸正方向所成的角,即 k=tanα 。 ax+by+c=0中,k=-a/b 。
什麼是極坐標系?
關於極坐標系,打開 百度百科 學習一下即可。
重點學到下面這個結論就行:
找資料的時候,發現一個解釋的比較清楚的 博客 ,後續可以繼續學習使用。
繼續閱讀資料,看到如下所示的圖,這個圖也出現在了很多解釋原理的博客裏面,但是圖下面寫了一句話
在這裡直接蒙掉了,怎麼就表示成極坐標系了?上面這個公式依舊是笛卡爾坐標系表示直線的方式呀,只是把 k 和 b 的值給替換掉了。
為何是這樣的,具體原因可以參照下圖。
centerchou 圖/center
繼續尋找關於霍夫變換的資料,找到一個新的概念 霍夫空間 。
在笛卡爾坐標系中,一條直線可以用公式 表示,其中 k 和 b 是參數,表示的是斜率和截距。
接下來將方程改寫為 ,這時就建立了一個基於 k – b 的笛卡爾坐標系。
此時這個新的方程在 k – b 坐標系也有一個新的直線。
你可以在紙上畫出這兩個方程對應的線和點,如下圖所示即可。
centerchou 圖/center
新的 k – b 坐標系就叫做霍夫空間,這時得到一個結論,圖像空間 x – y 中的點 對應了 霍夫空間 k – b 中的一條直線 ,即圖像空間的點與霍夫空間的直線發生了對應關係。
如果在圖像空間 x – y 中在增加一個點 ,那相應的該點在霍夫空間也會產生相同的點與線的對應關係,並且 A 點與 B 點產生的直線會在霍夫空間相交於一個點。而這個點的坐標值 就是直線 AB 的參數。
如果到這裡你掌握了,這個性質就為我們解決直線檢測提供了方法,只需要把圖像空間的直線對應到霍夫空間的點,然後統計交點就可以達到目的,例如圖像空間中有 3 條直線,那對應到霍夫空間就會有 3 個峰值點。
遍歷圖像空間中的所有點,將點轉換到霍夫空間,形成大量直線,然後統計出直線交會的點,每個點的坐標都是圖像空間直線方程參數,這時就能得到圖像空間的直線了。
上述的內容沒有問題,但是存在一種情況是,當直線趨近於垂直時,斜率 k 會趨近於無窮大,這時就沒有辦法轉換了,解決辦法是使用法線來表示直線。
上文提及的斜截式如下:
通過第二個公式,可以得到下述公式:
此時,我們可以帶入一些數值進行轉換。
圖像空間有如下的幾個點:
轉換後的函數,都可以在霍夫空間 θ – ρ (橫坐標是 θ ,縱坐標是 ρ )進行表示。
原理這時就比較清晰了:
除了一些數學知識以外,經典的博客我們也有必要記錄一下,方便後面學習的時候,進行復盤。
本部分用於記錄本文中提及的相關數學原理,後續還要逐步埋坑。
今天涉及了一點點數學知識,能力限制,大家一起學習,有錯誤的地方,可以在評論區指出,不勝感激。
希望今天的 1 個小時(今天內容有點多,不一定可以看完),你有所收穫,我們下篇博客見~
相關閱讀
技術專欄
逗趣程序員
關於用python畫多邊形的角度問題
這純粹是一個幾何的問題
假設每一個角的度數為a,作出圖來,平行的關係就會變得清晰明了
具體的過程是做一條輔助線(圖中的虛線),
可以用內錯角相等的兩條線平行,證明這條輔助線與兩條邊均平行
因此證明相隔兩條線的兩條線平行
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/241227.html