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/cn.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灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP