Python 板


LINE

目前剛接觸python 以python撰寫了一段Sobel影像處理,程式碼如下 =================================================== import cv2 import numpy as np img=cv2.imread("/home/chenposhao/Desktop/IMAGE/cameraman.tif",0) [row,col]=img.shape resx=np.zeros((row,col),np.uint8) kernalx=np.array([[1,2,1],[0,0,0],[-1,-2,-1]]) kernaly=np.array([[1,0,-1],[2,0,-2],[1,0,-1]]) for x in range(row): for y in range(col): if x==0 or x==row-1 or y==0 or y==col-1: pass else: subxsum=0 subysum=0 for i in range(-1,2): for j in range(-1,2): newx=img[x+i,y+j]*kernalx[i+1,j+1] subxsum=subxsum+newx newy=img[x+i,y+j]*kernaly[i+1,j+1] subysum=subysum+newy respixel=abs(subxsum+subysum/2) if respixel>255: respixel=255 elif respixel<0: respixel=0 resx[x,y]=respixel cv2.imshow("IMAGE",img) cv2.imshow("SOBELX",resx) cv2.waitKey(0) cv2.destroyAllWindows() ================================================================ 首先要先說,跑的圖片是256*256 我知道CV有SOBEL函式庫可以用, 但因為用他的函式庫發現他並沒有將所計算的像素取絕對值 因此有方向性的問題,為了驗證才寫此程式碼 但發現這個程式碼再執行的時候不如預期的快 從中間的for x in range(row): 到 resx[x,y]=respixel 整個FORLOOP跑完要5.5秒左右 VB,C幾毫秒即可跑完 想問一下這是python所必須要克服的事情嘛? 因為剛接觸Python,早有相傳他因為直譯所以速度慢 但想不到落差有些許的大 還是說其實這是能改善的? 謝謝 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.120.101.45
※ 文章網址: http://webptt.com/m.aspx?n=bbs/Python/M.1407169658.A.D84.html
1F:推 grtfor:直譯擅長的不在效率呀,有改進方法但要追上很難~ 08/05 01:00
2F:推 ccwang002:你不應該一個元素一個元素自己乘,這樣會慢很多 08/05 01:10
3F:推 ccwang002:多用 numpy array級操作才會快,python for-loop 會太慢 08/05 01:14
4F:→ ccwang002:另外,我找到 scipy.ndimage.filters.sobel 可以呼叫 08/05 01:14
5F:→ ccwang002:點旁邊的 source 就可以知道它 code 怎麼寫的 08/05 01:15
6F:推 vic0330:不知道range改xrange會不會比較快 08/05 08:37
7F:→ redonizuka:想更詳細的問一下何謂 numpy array級操作 08/05 09:36
8F:推 ccwang002:比如 i j 迴圈改成 np.sum(img * (kernalx + kernaly)) 08/05 10:24
9F:推 ccwang002:選部份矩陣應該用 img[x:x+3, y:y+3] 這型式的取值 08/05 10:30
10F:→ ccwang002:大原則避免自己寫 for 或複雜運算,numpy 本身是 C 速度 08/05 10:31
11F:→ ccwang002:看 scipy 寫法,它只用了 correlate1d 這函式就實作完了 08/05 10:32
12F:→ ccwang002:我不懂 sobel 沒法給建議,不夠快的話也可考慮 Cython 08/05 10:33
13F:推 LiloHuang:它會編譯成 bytecode 來跑呀,只是 CPython 挺慢是事實 08/06 20:27
14F:→ LiloHuang:現階段 CPython 也沒有像 Java 或 .NET 有做 JIT 優化 08/06 20:28
15F:→ LiloHuang:迴圈自然就是不會快去哪邊,做 Convolution 用 GPU 最快 08/06 20:29
16F:推 LiloHuang:退而求其次就是用 numpy.convolve + numpy.absolute 08/06 20:33
17F:→ LiloHuang:NumbaPro 聽說挺不錯的,可以用到 GPU 來加速... 08/06 20:35
18F:推 LiloHuang:另外,Sobel filter 是 separable filter 我想你知道 :D 08/06 22:19
19F:→ LiloHuang:儘管從 2D kernel 改 1D kernel 對於 Python 也沒快很多 08/06 22:20
20F:推 LiloHuang:這個 http://goo.gl/CrQiXl 可以跑跑看,也許有幫助 :P 08/06 22:48
21F:推 fischcheng:Numba 08/08 06:36
22F:推 LiloHuang:社群版的 Numba 效果應該也不錯吧,NumbaPro 得花錢就是 08/08 09:28
23F:→ ming1053: 跟matlab道理差不多啊 多用 vectorization 08/11 11:10
24F:→ redonizuka: 感謝大家的發問,我持續摸索,大家對我幫助很大,謝謝 08/13 16:31
25F:推 neutrino: similar question in stackoverflow http://ppt.cc/pSIw 08/14 16:45
26F:推 neutrino: 離題一下 希望 numpy on pypy 早日實現 08/14 16:56
27F:→ neutrino: http://pypy.org/numpydonate.html 08/14 16:56







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP