目前刚接触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,早有相传他因为直译所以速度慢
但想不到落差有些许的大
还是说其实这是能改善的?
谢谢