Ⅰ cv.fillPoly參數線寬
cv2.fillPoly 和 cv2.fillConvexPoly 對它們的點數組使用不同的數據類型,因為 fillConvexPoly 只繪制一個多邊形,而 fillPoly 繪制它們的(python)列表。 因此,
cv2.fillConvexPoly(ar, 三角形, 1)
cv2.fillPoly(ar, [三角形], 1)
是調用這兩種方法的正確方法。 如果你有正方形和六邊形點數組,你可以使用
cv2.fillPoly(ar, [三角形, 正方形, 六邊形], 1)
和三角形,正方形,六邊形都是點的列表,如 [(0,100),(0,self.shape[0]),(self.shape[1],self.shape[0]),(self.shape[1 ],100)]
繪制所有三個。
至於 fillPoly() 的第二次擴充的 dtype,我們應該使用 np.int32
作者:紅縷魚與綠縷魚與驢
鏈接:https://www.jianshu.com/p/9df961b467f2
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
Ⅱ 如何用Python進行線性回歸以及誤差分析
數據挖掘中的預測問題通常分為2類:回歸與分類。
簡單的說回歸就是預測數值,而分類是給數據打上標簽歸類。
本文講述如何用Python進行基本的數據擬合,以及如何對擬合結果的誤差進行分析。
本例中使用一個2次函數加上隨機的擾動來生成500個點,然後嘗試用1、2、100次方的多項式對該數據進行擬合。
擬合的目的是使得根據訓練數據能夠擬合出一個多項式函數,這個函數能夠很好的擬合現有數據,並且能對未知的數據進行預測。
代碼如下:
importmatplotlib.pyplot as plt
importnumpy as np
importscipy as sp
fromscipy.statsimportnorm
fromsklearn.pipelineimportPipeline
fromsklearn.linear_modelimportLinearRegression
fromsklearn.
fromsklearnimportlinear_model
''''' 數據生成 '''
x = np.arange(0,1,0.002)
y = norm.rvs(0, size=500, scale=0.1)
y = y + x**2
''''' 均方誤差根 '''
defrmse(y_test, y):
returnsp.sqrt(sp.mean((y_test - y) **2))
''''' 與均值相比的優秀程度,介於[0~1]。0表示不如均值。1表示完美預測.這個版本的實現是參考scikit-learn官網文檔 '''
defR2(y_test, y_true):
return1- ((y_test - y_true)**2).sum() / ((y_true - y_true.mean())**2).sum()
''''' 這是Conway&White《機器學習使用案例解析》里的版本 '''
defR22(y_test, y_true):
y_mean = np.array(y_true)
y_mean[:] = y_mean.mean()
return1- rmse(y_test, y_true) / rmse(y_mean, y_true)
plt.scatter(x, y, s=5)
degree = [1,2,100]
y_test = []
y_test = np.array(y_test)
fordindegree:
clf = Pipeline([('poly', PolynomialFeatures(degree=d)),
('linear', LinearRegression(fit_intercept=False))])
clf.fit(x[:, np.newaxis], y)
y_test = clf.predict(x[:, np.newaxis])
print(clf.named_steps['linear'].coef_)
print('rmse=%.2f, R2=%.2f, R22=%.2f, clf.score=%.2f'%
(rmse(y_test, y),
R2(y_test, y),
R22(y_test, y),
clf.score(x[:, np.newaxis], y)))
plt.plot(x, y_test, linewidth=2)
plt.grid()
plt.legend(['1','2','100'], loc='upper left')
plt.show()
該程序運行的顯示結果如下:
[ 0. 0.75873781]
rmse=0.15, R2=0.78, R22=0.53, clf.score=0.78
[ 0. 0.35936882 0.52392172]
rmse=0.11, R2=0.87, R22=0.64, clf.score=0.87
[ 0.00000000e+00 2.63903249e-01 3.14973328e-01 2.43389461e-01
1.67075328e-01 1.10674280e-01 7.30672237e-02 4.88605804e-02
......
3.70018540e-11 2.93631291e-11 2.32992690e-11 1.84860002e-11
1.46657377e-11]
rmse=0.10, R2=0.90, R22=0.68, clf.score=0.90
Ⅲ python腳本問題
哎,網路這個貼代碼的功能有待提高!
代碼是計算兩個數相加減吧,首先,第二行raw_input()即是把輸入的內容當作字元串了,不需要再轉換了;其次,上面的程序倒數第五、第七行寫錯了;最後,這個程序只能計算兩個數之間的加減,對於一串數字的運算就無能為力了。
按給出的演算法修改如下:
import string
a=raw_input('請輸入運算式:')
ans=0
flag=True
while flag:
if a.find('+') >= 1:
sign='+'
x=a[0:a.index(sign)]
y=string.atoi(x)
ans+=y
a=a[a.index(sign)+1:]
if a.find('+') < 0 and a.find('-') < 0:
z=string.atoi(a)
ans+=z
print ans
flag=False
elif a.find('-') >=1:
sign='-'
x=a[0:a.index(sign)]
y=string.atoi(x)
ans+=y
a=a[a.index(sign)+1:]
if a.find('+') < 0 and a.find('-') < 0:
z=string.atoi(a)
ans-=z
print ans
flag=False
-------------下面這個刪掉刪掉-------------------
import string
a=raw_input('請輸入運算式:')
sum=0
flag=True
while flag:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if a.find('+') &amp;gt;= 1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sign='+'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x=a[0:a.index(sign)]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y=string.atoi(x)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sum+=y
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a=a[a.index(sign)+1:]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if a.find('+') &amp;lt; 0 and a.find('-') &amp;lt; 0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;z=string.atoi(a)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sum+=z
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print sum
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;flag=False
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif a.find('-') &amp;gt;=1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sign='-'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x=a[0:a.index(sign)]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y=string.atoi(x)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sum+=y
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a=a[a.index(sign)+1:]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if a.find('+') &amp;lt; 0 and a.find('-') &amp;lt; 0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;z=string.atoi(a)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sum-=z
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print sum
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;flag=False
如果要重新寫一個,其實很簡單,用input()這個函數就行了:
>>> input.__doc__
'input([prompt]) -> value
Equivalent to eval(raw_input(prompt)).'。
程序如下:
#-*- coding:utf-8 -*-
def calcu():
while True:
poly=input('請輸入運算式:')
print poly
if __name__ == '__main__':
calcu()
#-*- coding:utf-8 -*-
def calcu():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while True:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;poly=input('請輸入運算式:')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print poly
if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;calcu()
--------------上面這個也刪掉-------------------
Ⅳ 用python,turtle繪制數字,如繪制260這三個數字,同時要求每個數字填不同的顏色
1、雙擊打開pycharm開發工具,在已新建的項目中新建python文件,輸入文件名稱。
Ⅳ Python中Turtle模塊的基本指令都有哪些
>>> dir(turtle)['Canvas', 'Pen', 'RawPen', 'RawTurtle', 'Screen', 'ScrolledCanvas', 'Shape', 'TK', 'TNavigator', 'TPen', 'Tbuffer', 'Terminator', 'Turtle', 'TurtleGraphicsError', 'TurtleScreen', 'TurtleScreenBase', 'Vec2D', '_CFG', '_LANGUAGE', '_Root', '_Screen', '_TurtleImage', '__all__', '__builtins__', '__doc__', '__file__', '__forwardmethods', '__func_body', '__methodDict', '__methods', '__name__', '__package__', '__stringBody', '_alias_list', '_make_global_funcs', '_math_functions', '_screen_docrevise', '_tg_classes', '_tg_screen_functions', '_tg_turtle_functions', '_tg_utilities', '_turtle_docrevise', '_ver', 'acos', 'acosh', 'addshape', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'back', 'backward', 'begin_fill', 'begin_poly', 'bgcolor', 'bgpic', 'bk', 'bye', 'ceil', 'circle', 'clear', 'clearscreen', 'clearstamp', 'clearstamps', 'clone', 'color', 'colormode', 'config_dict', 'sign', 'cos', 'cosh', 'deep', 'degrees', 'delay', 'distance', 'done', 'dot', 'down', 'e', 'end_fill', 'end_poly', 'erf', 'erfc', 'exitonclick', 'exp', 'expm1', 'fabs', 'factorial', 'fd', 'fill', 'fillcolor', 'floor', 'fmod', 'forward', 'frexp', 'fsum', 'gamma', 'get_poly', 'getcanvas', 'getmethparlist', 'getpen', 'getscreen', 'getshapes', 'getturtle', 'goto', 'heading', 'hideturtle', 'home', 'ht', 'hypot', 'isdown', 'isfile', 'isinf', 'isnan', 'isvisible', 'join', 'ldexp', 'left', 'lgamma', 'listen', 'log', 'log10', 'log1p', 'lt', 'mainloop', 'math', 'mode', 'modf', 'onclick', 'ondrag', 'onkey', 'onrelease', 'onscreenclick', 'ontimer', 'os', 'pd', 'pen', 'pencolor', 'pendown', 'pensize', 'penup', 'pi', 'pos', 'position', 'pow', 'pu', 'radians', 'read_docstrings', 'readconfig', 'register_shape', 'reset', 'resetscreen', 'resizemode', 'right', 'rt', 'screensize', 'seth', 'setheading', 'setpos', 'setposition', 'settiltangle', 'setundobuffer', 'setup', 'setworldcoordinates', 'setx', 'sety', 'shape', 'shapesize', 'showturtle', 'sin', 'sinh', 'speed', 'split', 'sqrt', 'st', 'stamp', 'tan', 'tanh', 'tilt', 'tiltangle', 'time', 'title', 'towards', 'tracer', 'trunc', 'turtles', 'turtlesize', 'types', 'undo', 'undobufferentries', 'up', 'update', 'width', 'window_height', 'window_width', 'write', 'write_docstringdict', 'xcor', 'ycor']>>>
Ⅵ opencv的cv2.fillconvexpoly函數怎麼用
:畫框用OpenCV自帶的cvRectangle函數就行,參數分別是(圖像,矩形左上頂點,矩形右下頂點,顏色,線條粗細),黑色cvScalar(0,0,0),白色cvScalar(255,255,255)。劃線用cvLine就行,參數分別是(圖像,點1,點2,顏色,線條粗細)。
Ⅶ OpenCV-Python系列八:提取圖像輪廓
當你完成圖像分割之後,圖像輪廓檢測往往可以進一步篩選你要的目標,OpenCV中可以使用cv2.findContours來得到輪廓。
補充 :
再不少場景中,找輪廓的最小外接矩形是基本需求,opencv中minAreaRect得到的是一個帶有旋轉角度信息的rect,可以使用cv2.boxPoints(rect)來將其轉為矩形的四個頂點坐標(浮點類型).你也可以使用cv2.polylines來繪制這樣的輪廓信息
注意findContours參數的變化,在opencv4中,返回值只有contours和hierarchy ,這一點與opencv3中不同。對與輪廓的層級結構,比較難用,雖然可以通過輪廓的層級結構來進行索引你需要的輪廓,不過對於大部分機器視覺應用場景,二值化的結果有時候很難預料,單單通過這種層級關系索引,非常容易出錯。所以,只找最外部結構的 cv2.RETR_EXTERNAL 是不是真香呢?
處理cv2.approxPolyDP()外,你也可以使用cv2.convexHull來求輪廓的近似凸包,其中凸形狀內部--任意兩點連線都在該形狀內部。
clockwise :默認為False,即輪廓為逆時針方向進行排列;
returnPoints :設置為False會返回與凸包上對應的輪廓的點索引值,設置為True,則會返回凸包上的點坐標集,默認為True
對於opencv-python的提取圖像輪廓部分有問題歡迎留言, Have Fun With OpenCV-Python, 下期見。